gpt4 book ai didi

C# implicit cast "overloading"和反射问题

转载 作者:行者123 更新时间:2023-11-30 14:03:13 25 4
gpt4 key购买 nike

我遇到了以下代码的问题(编译但崩溃):

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

}
}
}

我已经评论了不起作用的语句。有谁知道为什么 Convert.ChangeType 和 PropertyInfo.SetValue 似乎没有使用 MyBoolean 中定义的“重载”转换运算符?

顺便说一句,我在这里浏览了其他几个文档,但没有找到与问题完全匹配的内容。

最好的问候托马斯

最佳答案

Convert.ChangeType() 不使用隐式运算符。您需要让您的 MyBoolean 类型实现 IConvertible

第二个问题是相关的。不使用用户定义的转换运算符。在将其传递给 SetValue() 之前,您需要手动转换它。

关于C# implicit cast "overloading"和反射问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4501469/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com