У меня есть некоторые проблемы со следующим фрагментом кода. Я хотел бы указать строку для объекта, это работает отлично, однако, если этот объект является частью универсального класса, это приводит к сбою со следующим исключением ошибки: «Невозможно преобразовать объект типа« System.String » ввести 'test.B'". Хотя я перегрузил метод.
using System;
using System.Collections.Generic;
namespace test {
class Program {
static void Main(string [] args) {
// These two cast perfectly fine.
B x = (B) "abc";
C y = (C) "def";
A <B> a = new A<B>();
a.b();
A <C> b = new A<C>();
b.b();
}
}
class A<T> {
public List <T> a = new List<T>();
public void b() {
// Unable to cast object of type 'System.String' to type 'test.B'
this.a.Add ((T) (object) "abc");
this.a.Add ((T) (object) "def");
this.a.Add ((T) (object) "ghi");
}
}
class B {
public string b;
public static explicit operator B(string a) {
B x = new B();
x.b = a;
return x;
}
}
class C {
public string c;
public static explicit operator C(string a) {
C x = new C();
x.c = a;
return x;
}
}
}
Было бы здорово, если бы кто-нибудь мог объяснить мне, почему это не происходит должным образом.
Спасибо