带隐式类型转换的调用函数
我有一个这样的类。带隐式类型转换的调用函数
public class ForeignKey {
public string Id {get;}
public TableA TableA {get;}
public TableB TableB {get;}
public static implicit operator string(ForeignKey obj){ return obj.Id; }
public override string ToString() { return Id; }
/* various operator overloads */
}
我想有它的自动类型转换,所以我可以使用它像一个字符串。到目前为止,我所做的事情让我可以在没有明确表演的情况下在很多地方使用它。但是,我无法找到一种方法来调用字符串函数,而无需进行明确的转换。
例如,我想让这个工作。
if (Key.EndsWith(someValue))
目前,我必须这样做
if (((string)Key).EndsWith(someValue))
// or
if (Key.Id.EndsWith(someValue))
有没有办法得到它的工作,我想如何?
感谢
这是不能做到的,因为成员查找运算符.
没有考虑除ForeignKey
之外的其他类型的成员。
7.4节解释了过程。
- 首先,名为N组可访问成员被确定
- 接下来,如果K:
在类型T的具有K个类型的参数的名称N的成员查找如下处理是零,所有嵌套类型的声明包括类型参数都被删除。如果K不为零,则删除具有不同数量类型参数的所有成员。
- 接下来,如果调用该成员,则将从该集合中删除所有不可激活的成员。
- 接下来,从该集合中删除被其他成员隐藏的成员。
- 接下来,从类中删除被类成员隐藏的接口成员。如果T是类型参数,并且T具有非对象的有效基类和非空有效接口集,则此步骤仅起作用。
- 最后,具有除去隐藏的成员时,查找的结果确定:
- 如果该集合由单个构件不是一个方法,则此部件是查找的结果的。
- 否则,如果该集合仅包含方法,则这组方法是查找的结果。
- 否则,查找不明确,并发生绑定时错误。
由于C#不考虑会员解决的过程转换操作符,你唯一的选择是将方法添加到类,直接或通过一个扩展。
谢谢。看起来我会加入一些函数来调用字符串函数。 –
您可以create a extension method采取这种Key作为参数。
namespace ExtensionMethods
{
public static class Utilities
{
public static bool ValueEndsWith(this Key key, ref string valueToCheck)
{
return key.Id.EndsWith(valueToCheck);
}
}
}
您可以将其称为Key.ValueEndsWith(ref valueString)
;
哦,我不清楚,我想直接调用字符串函数。不创建一组调用各种字符串函数的函数。 –
Key.Id已经是字符串。您的最后一个选项Key.Id.EndsWith(someValue)应该会自动工作。 – Amit
您可以使用签名创建一个C#扩展方法public static KeyValue(this Key key){} – Amit
Right,Key.Id.EndsWith可以工作,但我希望获得Key.EndsWith的工作。 –