C# 如何使对象在比较时充当另一种类型?
我不记得如何在C#中将类与基元类型进行比较 范例C# 如何使对象在比较时充当另一种类型?,c#,.net,c#-4.0,C#,.net,C# 4.0,我不记得如何在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) { ... } 你知道它的名字和方法吗?你是说运算符重载吗
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)
{
...
}
你知道它的名字和方法吗?你是说运算符重载吗
public static bool operator == (Validate v, bool value)
{
return /* some comparison */
// or going off of the other posters answer
return v.IsValid == value;
}
只需将
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;
}
}
但同样,不要这样做。这将使您的代码很难理解。我想您正在寻找一个新的解决方案 将以下方法添加到Validate类:
public static implicit operator bool(Validate v)
{
// Logic to determine if v is true or false
return true;
}
要执行所需操作,需要重写隐式强制转换运算符:
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
为偶数,则上述示例将计算为真:
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)
使意图更加清晰。他希望能够将类Validate与布尔值进行比较。是的,我知道。我认为可以通过重载==
和来实现这一点=代码>运算符。唯一想到的可能是你期望的行为的复制品?你想自己控制吗?我的意思是,当存在一个对象时,你希望v为真,还是当它符合你的标准时?我希望v与真/假进行比较。我不想使用属性或方法…是的,但您希望True/False代表什么?一个存在的对象可能有错误的值,那么它仍然是“真的”吗?它不允许你做<代码> V==true < /COD>它吗?@菲利普:不,我认为这是一件好事。如果这真的是OP想要的,他应该在Validate
类型上实现一个公共静态隐式运算符bool(Validate v)
方法。@Daok:我知道你不想要,但请不要这样做。这正是我想要的!谢谢你,先生@道,我不认为这正是你想要的。不要使用隐式运算符,除非您能够将Validate
的所有可能值有意义且可靠地映射为bool
的值。如果您只想执行==true
和==false
,那么我推荐下面hunter提供的操作员过载解决方案。