我创建了一个继承自KeyedByTypeCollection
的类,并对其进行了扩展。
KeyedByTypeCollection
仅具有Find
方法,如果未找到任何项,则返回null
。我更喜欢TryGetValue
方法,所以我添加了一个。
internal class TypeCollection<V> : KeyedByTypeCollection<V>
{
public T ValueOrDefault<T>() where T : V
{
if (!Contains(typeof(T)))
{
return default(T);
}
return (T)this[typeof(T)];
}
public bool TryGetValue<T>(out T value) where T : V
{
if (!Contains(typeof(T)))
{
value = default(T);
return false;
}
value = (T)this[typeof(T)];
return true;
}
}
没有东西可以继承。我只想扩展现有的课程。我从这两种扩展方法开始
internal static class KeyedByTypeCollectionExtensions
{
public static T ValueOrDefault<T>(this KeyedByTypeCollection<V> collection) where T : V
{
if (!collection.Contains(typeof(T)))
{
return default(T);
}
return (T)collection[typeof(T)];
}
public static bool TryGetValue<T>(this KeyedByTypeCollection<V> collection, out T value) where T : V
{
if (!collection.Contains(typeof(T)))
{
value = default(T);
return false;
}
value = (T)collection[typeof(T)];
return true;
}
}
但是如何设置这些扩展方法?我必须为通用类型V
设置什么?
答案 0 :(得分:3)
您将必须定义 int result = 1;
for (int j = 0; j < inputArray.Length; j++)
{
result = result * inputArray[j];
}
for (int i = 0; i < resultArray.Length; i++)
{
resultArray[i] = result / inputArray[i];
}
。
V
和
public static T ValueOrDefault<T,V>(this KeyedByTypeCollection<V> collection) where T : V
它将与public static bool TryGetValue<T,V>(this KeyedByTypeCollection<V> collection, out T value)
where T : V
一起很好地工作,因为编译器会知道使用了哪种类型,但是对于TryGetValue
,您将不得不设置这两种类型,这有点难看。 / p>
让我们考虑以下类别:
ValueOrDefault
那么用法可以是:
public class A { }
public class B : A { }