我有一个函数,它接受两个通用对象输入,将第二个转换为第一个,然后比较两个。
功能:
public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
object parameterCast = System.Convert.ChangeType(parameter, value.GetType());
return parameterCast.Equals(value);
}
我认为这有几个问题,但我不确定如何解决。
首先,如果不能将参数转换为值,该怎么办?
其次,我是否需要检查每个对象是否为空?如果是这样,怎么样?
是否有人对修改此功能有任何建议或建议?
非常感谢任何帮助,谢谢。
答案 0 :(得分:2)
检查value
是否为空的最准确方式是
if (Object.ReferenceEquals(null, value)) {
// value is null
...
}
其他流行方式
// == operartor can be implemented explicitly
if (value == null) {...}
// Equals method could be overriden
if (Object.Equals(null, value)) {...}
可能不正确,因为Equals
方法或/和== operator
可以覆盖/重新声明。
答案 1 :(得分:1)
我不确定您是否需要单独的方法 1 。您是否会提供一些您打算如何使用该方法的示例?
至于修改函数,您的示例代码不使用targetType
或culture
参数。此外,函数的名称令人困惑,因为它的返回值是Equals
方法的结果。
您可以使用parameter == (ParameterTargetType)value
而不是使用该方法,但是无法将对象转换为任意类型或类,因此您需要实现某种方式来实现,或者使用try ... catch ...
语句来处理可能的强制转换异常。
哦,是的,要检查对象是否为空,只需使用object == null
。使用if
语句,您可以写:
if (value == null)
{
// Do something if the 'value' object is null.
}
1 通常,C#中的函数称为方法。它们总是(?)是函数是类的成员。
答案 2 :(得分:1)
这将检查引用是否指向同一个东西,然后检查是否为null,您可以返回您想要的内容。在它之后你可以施放然后比较,如果这两个都通过。
if (System.Object.ReferenceEquals(lhs, rhs))
{
return true;
}
if (System.Object.ReferenceEquals(lhs, null) || System.Object.ReferenceEquals(rhs, null))
{
return false;
}
但是我会考虑实际使用Generic函数。这样的事情应该有效。如果as TData
失败,则如果对象未返回equals操作,则该对象将为null。
public object Convert<TData>(TData value, object parameter, System.Globalization.CultureInfo culture)
where TData : class
{
TData convertedObject = parameter as TData;
if (convertedObject == null)
return false;
else
return value == convertedObject;
}
虽然未经测试。