我不记得在C#中如何做一个类与原始类型的比较。
实施例
public class Validate{
... //This is here that we would need to add code
//if I remember to make the object act as a boolean for example
}
...
Validate v = new Validate(...);
if(v==true)
{
...
}
你知道那个名字以及怎么做吗?
答案 0 :(得分:2)
我认为你正在寻找implicit type conversion。
将以下方法添加到Validate类:
public static implicit operator bool(Validate v)
{
// Logic to determine if v is true or false
return true;
}
答案 1 :(得分:2)
要执行您想要的操作,您需要覆盖隐式强制转换操作符:
public class MyObject
{
private int i;
public MyObject(int i)
{
this.i = i;
}
public static implicit operator bool(MyObject o)
{
return o.i % 2 == 0;
}
}
如果字段i
是偶数,则上面的示例将评估为true:
MyObject o1 = new MyObject(1);
MyObject o2 = new MyObject(2);
if (o1)
{
Console.WriteLine("o1");
}
if (o2)
{
Console.WriteLine("o2");
}
以上输出为o2
。
然而,这是一个可怕的实现,因为它导致令人困惑的代码,因为你有一些读作为if (object)
的结构,这对大多数读者来说是不熟悉的 - if (object.IsValid)
使意图更多更清楚。
答案 2 :(得分:1)
你的意思是运算符重载?
public static bool operator == (Validate v, bool value)
{
return /* some comparison */
// or going off of the other posters answer
return v.IsValid == value;
}
答案 3 :(得分:1)
只需将IsValid
属性添加到Validate
类并调用该属性:
public class Validate
{
public bool IsValid
{
get { [implementation here] }
}
}
...
Validate v = new Validate(...);
if(v.IsValid)
{
...
}
可以创建一个隐式运算符,但不建议以这种方式使用它,因为它会使您的代码难以跟随其他开发人员。
<强>更新强>
好的,只是为了完整性和教育,这是如何做到的:
public class Validate
{
public bool IsValid
{
get { [implementation here] }
}
public static implicit operator bool(Validate v)
{
return v.IsValid;
}
}
但是,再说一遍,不要这样做。它会使你的代码很难遵循。