Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/317.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#访问类型为的对象方法_C#_Arrays_Generics - Fatal编程技术网

C#访问类型为的对象方法

C#访问类型为的对象方法,c#,arrays,generics,C#,Arrays,Generics,在编程任务中,我们不允许使用列表,我们只能使用数组,但是我有多个类和数组,我想检查其中的变量 Foo f = new Foo(); Bar b = new Bar(); Foo[] fArray = new Foo[1]; fArray[0] = f; CheckStatus(fArray); public boolean CheckStatus<T>(T[] array) { if(array[0].IsTrue()) { return true;

在编程任务中,我们不允许使用列表,我们只能使用数组,但是我有多个类和数组,我想检查其中的变量

Foo f = new Foo();
Bar b = new Bar();

Foo[] fArray = new Foo[1];
fArray[0] = f;

CheckStatus(fArray);


public boolean CheckStatus<T>(T[] array) {

    if(array[0].IsTrue()) {
        return true;
    }

return false;
Foo f=new Foo();
杆b=新杆();
Foo[]fArray=新Foo[1];
法拉利[0]=f;
检查状态(fArray);
公共布尔检查状态(T[]数组){
if(数组[0].IsTrue()){
返回true;
}
返回false;
然而,我只得到了“无法解决符号”IsTrue的问题 我可以通过直接将它投射到一个Foo对象来让它工作,但是它不能与Bar等一起工作

它与的泛型在大多数其他方面都非常有效,比如扩展数组长度,但当我需要访问对象的变量时,我需要对其进行强制转换,为此,我需要为我的程序想要与此方法一起使用的每种类型的类使用特定的if语句


提前感谢我在这里能得到的任何帮助。

您将需要一个接口。并让您的类实现它

public interface IMyObj
{
     bool IsTrue();
}
然后约束你的T型

public boolean CheckStatus<T>(T[] array) where T : IMyObj {...}
public boolean CheckStatus(T[]数组),其中T:IMyObj{…}

最简单的方法可能是为所有类提供一个公共接口,这些类定义了泛型函数中所需的公共方法。您需要向我们展示Foo和Bar的定义。正如@unholysheep指出的,如果Foo和Bar都具有相同签名的IsTrue方法,请创建一个接口(IFooOrBar)定义了该方法。然后声明两个类来实现该接口。最后将T约束为实现接口的类型fo和Bar基本上是相同的对象,它们具有相同的变量类型和所有内容,几乎是相互的复制粘贴。刷新我对接口如何工作的记忆看起来很有希望,特别是有三分之三的人建议这样做。