Ich suche diese Schnittstellen hinzuzufügen:Was ist mehrdeutig an diesem abgeleiteten Interface Getter?
public interface IIndexGettable<TKey, TValue>
{
TValue this[TKey key]{ get; }
}
public interface IIndexSettable<TKey, TValue>
{
TValue this[TKey key]{ set; }
}
public interface IIndexable<TKey, TValue> : IIndexGettable<TKey, TValue>, IIndexSettable<TKey, TValue>
{
// new TValue this[TKey key]{ get; set; } // as suggested by SO question 1791359 this will "fix" the issue.
}
Wenn ich, ich Fehler erhalte die folgenden Compiler dann versuchen, einen IIndexable
‚s Getter zu verwenden:
The call is ambiguous between the following methods or properties: 'IIndexGettalbe<TKey, TValue>.this[Tkey]' and 'IIndexSettable<TKey, TValue>.this[TKey]'
Hier ist der Code I lief:
public static class IIndexableExtensions
{
public static Nullable<TValue> AsNullableStruct<TKey, TValue>(this IIndexable<TKey, object> reader, TKey keyName) where TValue : struct
{
if (reader[keyName] == DBNull.Value) // error is on this line.
{
return null;
}
else
{
return (TValue)reader[keyName];
}
}
}
Sollte es nicht eindeutig den Getter von der IIndexGettable erben a nd den Setter von der IIndexSetable?
Übrigens, ich versuche nicht, diesen Klang in Richtung Sprachdesign zu entzünden. Ich bin mir sicher, dass es einen guten Grund dafür gibt, mein Ziel ist es zu verstehen, was der Grund ist, um die Sprache besser zu verstehen.
Off-Thema vielleicht, aber wie wäre es mit Methode statt Eigenschaft? – Ksv3n
@ Ksv3n - mein Ziel ist es, Dinge wie Wörterbuch zu IIndexGettable usw. zu übersetzen. Sonst würde das funktionieren, danke. –
user420667
Nun, Sie können 'Dictionary' nicht auf 'IIndexGetable ' anwenden, weil es diese Schnittstelle nicht implementiert (es hat zufälligerweise eine Methode mit der gleichen Signatur, die nicht die gleiche Sache ist). Also, wenn das dein Ziel ist, bellst du den falschen Baum an. Sie müssten eine _new_-Klasse erstellen, die "Dictionary_ _" erbt (oder einkapselt) und die neue (n) Schnittstelle (n) implementiert. –