如果存在,则以下Java代码的C#等效项是什么:
new HashMap<Class<? extends BaseClass>, Integer>();
我目前使用new Dictionary<Type, int>()
,这更像
new HashMap<Class<?>, Integer>()
是明显不同。
(忽略之间的差异HashMap
和Dictionary
)
编辑: 为澄清起见,我不尝试定义新类,只需创建HashMap
/ 的实例Dictionary
。
C#中没有Java通配符。在Java中,类型类型是Class<T>
其中T
的类本身。C#中的等效项是类型Type
,它 不是泛型的
。因此,您似乎最好的办法就是拥有一个Dictionary<Type, int>
,如果将其封装在一个类中,则可以限制您在代码中放入字典的内容(因此,这只是运行时检查):
private Dictionary<Type, int> myDictionary = new Dictionary<Type, int>();
public void Add(Type type, int number) {
if (!typeof(BaseClass).IsAssignableFrom(type)) throw new Exception();
myDictionary.Add(type, number);
}
您甚至可以IDictionary
使用该逻辑来实现自己的逻辑。
更新
我可以想到的另一个 运行时 技巧是为您的类型使用包装器类:
public class TypeWrapper<T>
{
public Type Type { get; private set; }
public TypeWrapper(Type t)
{
if (!typeof(T).IsAssignableFrom(t)) throw new Exception();
Type = t;
}
public static implicit operator TypeWrapper<T>(Type t) {
return new TypeWrapper<T>(t);
}
}
(也可以执行Equals
和GetHashCode
,仅委托给Type
。)
然后您的字典变成:
var d = new Dictionary<TypeWrapper<BaseClass>, int>();
d.Add(typeof(BaseClass), 2);
d.Add(typeof(Child), 3);
问题内容: 我知道您可以使用lock在c#中锁定对象,但是可以放弃该锁并等待其他东西来通知您它已更改,就像您可以在Java中使用wait和notify一样吗? 在我看来,分别在Java和C#中同步和锁定是同义的。 问题答案: 等效功能(包括常规锁定)在Monitor类中。 C#中的语句等效于调用并带有适当的try / finally块。 有关更多详细信息,请参见我的线程教程或Joe Albahar
问题内容: 我正在寻找Java ByteBuffer的“ C ++”。 我可能会丢失明显的内容,或者仅需要一个孤立的用法示例进行澄清。我浏览了iostream家族,它似乎可以提供基础。具体来说,我希望能够: 从字节数组/点构建缓冲区,并从缓冲区获取原语,例如getByte,getInt 使用原语(例如putByte,putInt)构建缓冲区,然后获取字节数组/指针。 问题答案: 您已经拥有,或者可
问题内容: Java是否具有表示一段时间的数据类型,例如34秒,5分钟等。 我已经看到了一些TimeSpan的实现,这些实现涵盖了从12月10日到12月11日这样的时间段。 我需要的是类似C#中的TimeSpan。 问题答案: 目前还不是JDK的一部分,但是将被合并到JDK 7中-尝试Joda Time
问题内容: 从Java世界进入C#,是否有等效的HashMap?如果没有,您会推荐什么? 问题答案: 可能是最接近的。实现接口(类似于Java的接口)。 您应该注意一些明显的区别: 添加/获取项目 Java的HashMap具有用于设置/获取项目的和方法 C#的词典使用索引来设置/获取项目 键 Java 允许空键 如果您尝试添加空键,.NET会引发 添加重复密钥 Java 将用新值替换现有值。 如果
问题内容: 我正在寻找具有C ++ std :: map的通常实现特征的Java类(据我了解,这是一个自平衡二进制搜索树): 插入/删除/搜索的O(log n)性能 每个元素均由唯一键和映射值组成 按键遵循严格的弱顺序 我正在寻找带有开源或设计文档的实现;我可能最终会放弃对原始键/值的支持。 这个问题的风格类似于:std :: deque的Java等效 ,其答案是“ Java Primitive
问题内容: C#中的Java枚举相当于什么? 问题答案: 完整的Java枚举功能在C#中不可用。你可以来 合理地 接近使用嵌套类型和私有构造虽然。例如: 当然你不 具备 使用嵌套类型,但他们给了方便的“自定义的行为”其中一部分的Java枚举是好的。在其他情况下,您可以仅将参数传递给私有构造函数以获取众所周知的受限值集。 一些不能给您的事情: 顺序支持 开关支持 序列化/反序列化(作为单例) 尽管没