Baca dalam bahasa Inggris

Bagikan melalui


Kesalahan Pengompilasi CS0313

Jenis 'type1' tidak dapat digunakan sebagai parameter jenis 'parameter name' dalam jenis generik atau metode 'type2’. Jenis 'type1' yang dapat diubah ke null tidak memenuhi batasan 'type2'. Jenis yang dapat diubah ke null tidak dapat memenuhi batasan antarmuka apa pun.

Jenis nilai yang dapat diubah ke null tidak setara dengan rekan yang tidak dapat diubah ke null. Dalam contoh berikut, ImplStruct memenuhi batasan BaseInterface tetapi ImplStruct? tidak karena Nullable<ImplStruct> tidak menerapkan BaseInterface.

Untuk memperbaiki kesalahan ini

  1. Menggunakan kode yang mengikuti sebagai contoh, salah satu solusinya adalah menentukan ImplStruct biasa sebagai argumen jenis pertama dalam panggilan ke TestMethod. Kemudian ubah TestMethod untuk membuat versi yang dapat diubah ke null dari Implstruct dalam pernyataan pengembaliannya:

    return new Nullable<T>(t);  
    

Contoh

Kode berikut menghasilkan CS0313:

// cs0313.cs  
public interface BaseInterface { }  
public struct ImplStruct : BaseInterface { }  
  
public class TestClass  
{  
    public T? TestMethod<T, U>(T t) where T : struct, U  
    {  
        return t;  
    }  
}  
  
public class NullableTest  
{  
    public static void Run()  
    {  
  
        TestClass tc = new TestClass();  
        tc.TestMethod<ImplStruct?, BaseInterface>(new ImplStruct?()); // CS0313  
    }  
    public static void Main()  
    { }  
}  

Lihat juga