目前我的代码就像那样
public class ExampleClass
{
private static string[] words = new string[] { "Word1","Word2","Word3","Word4","Word5" };
public static bool IsExist(string Word)
{
return words.Any(w => w == Word);
}
}
我称之为
ExampleClass.IsExist("Word1"); //Returns true
ExampleClass.IsExist("WordNotExist"); //Returns false
但我想这样打电话
ExampleClass.IsExist["Word1"]; //Returns true
ExampleClass.IsExist["WordNotExist"]; //Returns false
我应该如何修改我的课程,请帮助我
答案 0 :(得分:4)
我认为你在这里真的很糟糕,因为使用索引器调用方法是错误的。有了它,你就不能在静态类上拥有索引器。
那说,这就是它的工作原理:
public class ExampleClass
{
public class IsExistHelper
{
private static string[] words = new string[] { "Word1", "Word2", "Word3", "Word4", "Word5" };
public bool this[string Word]
{
get
{
return words.Any(w => w == Word);
}
}
}
public static IsExistHelper IsExist { get; } = new IsExistHelper();
}
我使用内部类创建了一个帮助器,它创建了你的属性名。里面有一个索引器,它有原始代码。
答案 1 :(得分:1)
不确定为什么你会这样做,但是:
public class ExampleClass
{
private string[] words = new string[] { "Word1", "Word2", "Word3", "Word4", "Word5" };
public bool this[string Word]
{
get { return words.Any(w => w == Word); }
}
}
必须使用实例调用它:
var _ = new ExampleClass();
var isTrue = _["Word1"] == true
很遗憾,您无法使用static
成员进行此操作。或者,您需要在辅助类中创建一个索引器,其实例名称为IsExist
。
我的意见是你应该保持原样。
答案 2 :(得分:1)
要完全按照你想要的方式实现它(尽管在我看来这不是一个好的设计)使用一个内部类来覆盖[]
运算符并检查你的状况。然后在你的原始类中有一个内部类的属性。
请注意,覆盖[]
运算符时,您无法使用静态类。
请注意,您可以使用Any
而不是Contains
,因为您正在检查整个对象本身,这是一种更简洁的方法
public static class ExampleClass
{
public class InnerIsExist
{
private string[] words = new string[] { "Word1", "Word2", "Word3", "Word4", "Word5" };
public bool this[string word]
{
get { return words.Contains(word); }
}
}
public static InnerIsExist IsExist { get; } = new IsExistClass();
}
使用:
var doesItContain = ExampleClass.IsExist["b"]; // false
答案 3 :(得分:1)
目前,您正在调用一个函数,它就像声明它一样简单,但对于方括号,您将不得不重载它们。这是一个有用的链接:How do I overload the square-bracket operator in C#?
基本上,在你的情况下它应该是这样的:
public bool this[string Word]
{
get { return words.Any(w => w==Word); }
}
我还没有对代码进行测试,请告诉我它是否有效。