一位同事和我本人在讨论.NET中的转换时,他指出了四种转换类型的方法,起初我只能提出两种隐式和显式的方法,然后他指出了用户定义的转换并使用了帮助器类,因此我决定在http://msdn.microsoft.com/en-us/library/ms173105.aspx处查找它,而我却发现我做了很多WPF,并且经常使用IValueConverter接口。

我的问题开始于-IValueConverter不仅是具有帮助程序类的转换的示例(当然,在实现时)?然后,我感觉很好,用户定义的转换与使用帮助程序类的转换之间的真正区别是什么?如果您按照上述MSDN页面上的链接进行操作,则说明文档为sorda slim。与此类似的是转换运算符页面上的示例。

class SampleClass
{
    public static explicit operator SampleClass(int i)
    {
        SampleClass temp = new SampleClass();
        // code to convert from int to SampleClass...

        return temp;
    }
}


并没有说清楚。对我来说,它看起来像一个静态类,需要在ctor中有一个int?

无论如何-希望一些C#忍者可以阐明这个主题。最后一个想法是,我通常会尽量避免进行转换,除非在日常代码中确实有很好的理由(即解析电子表格),我倾向于将其视为代码味道,这被认为是最佳实践吗?

谢谢

最佳答案

这不是您问题的完整答案,但是该代码段覆盖了该类的“显式强制转换”,从方法签名来看,这并不是很直观。基本上,它将允许您执行以下操作:

int one = 1;
SampleClass x = (SampleClass)one;


常识认为强制转换应该失败,因为int不是SampleClass,但是问题中的代码段起作用,并使强制转换成为可能。

另一种补充方法是:

public static implicit operator SampleClass(int i)


请注意,此处的关键字是implicit而不是explicit,并且此版本允许隐式转换,因此可以使用:

int one = 1;
SampleClass x = one;


请注意,您不再需要指定强制类型转换。

关于c# - IValueConverter不仅是“使用帮助程序类进行转换”的示例,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/11362604/

10-17 01:52