Tho*_*mas 3 c# reflection implicit-cast
我遇到以下代码的问题(编译但崩溃):
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Reflection;
namespace ConsoleApplication1
{
public struct MyBoolean
{
public bool Value { get; set; }
//cast string -> MyBoolean
public static implicit operator MyBoolean(System.String value)
{
return new MyBoolean() { Value = (value[0] == 'J') };
}
//cast bool -> MyBoolean
public static implicit operator MyBoolean(bool value)
{
return new MyBoolean() { Value = value };
}
//cast MyBoolean -> bool
public static implicit operator bool(MyBoolean value)
{
return value.Value;
}
}
public class Foo
{
public MyBoolean TestProp { get; set; }
}
class Program
{
static void Main(string[] args)
{
MyBoolean myBool = true; //works
myBool = "N"; //works
Foo foo = new Foo();
foo.TestProp = "J"; //works
PropertyInfo pi = foo.GetType().GetProperty("TestProp");
var obj = Convert.ChangeType("J", typeof(MyBoolean)); //throws an InvalidCastException
pi.SetValue(foo, "J", null); //throws an ArgumentException
}
}
}
Run Code Online (Sandbox Code Playgroud)
我评论了那些不起作用的陈述.有谁知道为什么Convert.ChangeType和PropertyInfo.SetValue似乎没有使用MyBoolean中定义的"重载"强制转换运算符?
顺便说一句,我一直在浏览其他几个文档,但没有找到问题的完全匹配.
最好的问候托马斯
Convert.ChangeType()不使用隐式运算符.您需要拥有MyBoolean类型的实现IConvertible.
第二个问题是相关的.不使用用户定义的转换运算符.您需要在传递之前手动转换它SetValue().
| 归档时间: |
|
| 查看次数: |
1357 次 |
| 最近记录: |