using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Reflection;
using System.Text;
using System.Threading.Tasks;
public class MyTable
{
public float[] FloatArray;
public String[] StringArray{ get; private set; }
}
namespace ShootCore
{
public abstract class WriteInfo
{
public delegate object WriteCallBack(object target,String value,String[] values);
public Type mBaseType{ get; private set; }
private WriteCallBack mWriteCallBack;
public WriteInfo(Type baseType, WriteCallBack callback)
{
this.mBaseType = baseType;
this.mWriteCallBack = callback;
}
protected object WriteAnyDataFromString(string content)
{
object data = null;
if (this.mBaseType.IsArray)
{
String[] results;
content = content.Trim(new char[] { ' ', '{', '}' });
if (this.mBaseType.Equals(typeof(string[])))
{
results = content.Split(new String[] { ";;;" }, StringSplitOptions.None);
}
else
{
results = content.Split(new char[] { ',' });
}
data = System.Activator.CreateInstance(mBaseType, results.Length);
data = this.mWriteCallBack(data, null, results);
}
else
{
data = System.Activator.CreateInstance(mBaseType);
data = this.mWriteCallBack(data, content, null);
}
return data;
}
public abstract void SetValue(object target,string content);
public abstract object GetValue(object target);
}
public class WriteInfoForField : WriteInfo
{
private FieldInfo mFieldInfo;
public WriteInfoForField(FieldInfo info, WriteInfo.WriteCallBack callback)
: base(info.FieldType, callback)
{
mFieldInfo = info;
}
public override void SetValue(object target, string content)
{
mFieldInfo.SetValue(target, this.WriteAnyDataFromString(content));
}
public override object GetValue(object target)
{
return mFieldInfo.GetValue(target);
}
}
public class WriteInfoForProperty : WriteInfo
{
private PropertyInfo mFieldInfo;
public WriteInfoForProperty(PropertyInfo info, WriteInfo.WriteCallBack callback)
: base(info.PropertyType, callback)
{
mFieldInfo = info;
}
public override void SetValue(object target, string content)
{
mFieldInfo.SetValue(target, this.WriteAnyDataFromString(content));
}
public override object GetValue(object target)
{
return mFieldInfo.GetValue(target);
}
}
class Global
{
static object WriteFloatArrayData(object target, String value, String[] values)
{
float[] fa = (float[])target;
for (int i = 0, max = fa.Length; i < max; ++i)
{
if (false == float.TryParse(values[i], out fa[i]))
{
fa[i] = 0;
}
}
return fa;
}
static object WriteStringArrayData(object target, String value, String[] values)
{
String[] fa = (String[])target;
Array.Copy(values,fa,fa.Length);
return fa;
}
static void Main(string[] args)
{
FieldInfo floatArr = typeof(MyTable).GetField("FloatArray");
PropertyInfo stringArr = typeof(MyTable).GetProperty("StringArray");
WriteInfoForField wifFloat = new WriteInfoForField (floatArr, WriteFloatArrayData );
WriteInfoForProperty wifString = new WriteInfoForProperty(stringArr, WriteStringArrayData);
MyTable tt = new MyTable();
wifFloat.SetValue(tt,"{0.0,0.1,0.2,0.3,0.04}");
wifString.SetValue(tt,"{我是个;;;大老粗;;;也是个;;;文雅人;;;Over}");
foreach (var val in tt.FloatArray)
{
Console.WriteLine("Float Value:{0}",val);
}
foreach (var val in tt.StringArray)
{
Console.WriteLine("String Value:{0}", val);
}
}
}
}
文章标题
最新推荐文章于 2023-10-19 15:03:50 发布