将类型转换为myType
问题描述:
我想为Object
中的所有decimal
字段设置默认值。方法做它看起来像这样:将类型转换为myType
private Type SetAllFieldsAsDefault(Type register)
{
var fields = register.GetFields(BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance);
foreach (var field in fields)
{
if (field.FieldType != typeof(double)) continue;
field.SetValue(field, 0);
}
return register;
}
我尝试后铸造myType
,但它不工作
myType = (MyType)SetAllFieldsAsDefault(myType.GetType());
我该怎么办呢?
答
你需要一个对象作为输入,并作为输出
private object SetAllFieldsAsDefault(object _register)
{
Type register = _register.GetType();
,你会在上面的方法
field.SetValue(_register, 0);
最后链上的修改的输入设置其值
return _register;
}
调用方法
myType = (MyType)SetAllFieldsAsDefault(myType);
这里是一个test online
public static void Main()
{
var myType = new MyType();
Console.WriteLine(myType.one + " " + myType.two);
Console.WriteLine("before");
myType = SetAllFieldsAsDefault(myType) as MyType;
Console.WriteLine("after");
Console.WriteLine(myType.one + " " + myType.two);
}
class MyType {
internal double one = -1.1;
internal string test = "hi";
internal double two = 3.3;
}
输出
before
-1.1 3.3
after
0 0
你不给它实际的对象设定值到和你只返回一个'Type'。它不能投射到你拥有的实际物体上。 'SetValue'应该有实际的对象作为第一个参数。 –
我不知道这段代码期望做什么。您不能在类型上设置实例值。而'field.SetValue(field,0)'完全是错误的。请参阅[文档](https://msdn.microsoft.com/en-us/library/6z33zd7h(v = vs.110).aspx) – Amy