Questions tagged «type-safety»

类型安全性是指语言根据变量的类型以不安全的方式不鼓励使用变量的程度。


10
类型安全性:未经检查的演员表
在我的spring应用程序上下文文件中,我有类似以下内容: <util:map id="someMap" map-class="java.util.HashMap" key-type="java.lang.String" value-type="java.lang.String"> <entry key="some_key" value="some value" /> <entry key="some_key_2" value="some value" /> </util:map> 在java类中,实现如下所示: private Map<String, String> someMap = new HashMap<String, String>(); someMap = (HashMap<String, String>)getApplicationContext().getBean("someMap"); 在Eclipse中,我看到一条警告: 类型安全性:未经检查的从Object到HashMap的强制转换 我做错什么了?我该如何解决该问题?


11
字符串的通用类型转换
我有一个要用于存储另一个类的“属性”的类。这些属性仅具有名称和值。理想情况下,我希望能够添加类型化的属性,以便返回的“值”始终是我想要的类型。 该类型应始终为原始类型。此类继承了一个抽象类,该抽象类基本上将名称和值存储为字符串。这个子类将为基类增加一些类型安全性(并为我节省一些转换)。 因此,我创建了一个(大致)这样的类: public class TypedProperty<DataType> : Property { public DataType TypedValue { get { // Having problems here! } set { base.Value = value.ToString();} } } 所以问题是: 是否有“通用”方式将字符串转换回原始类型? 我似乎找不到任何通用的接口来转换转换(像ITryParsable这样的东西会是理想的!)。

15
C#中的有区别的联合
[注意:这个问题的原标题为“ C#中的C(ish)样式联合 ”,但正如Jeff的评论所知,这种结构显然称为“歧视联合”。 不好意思,这个问题。 在SO中已经有几个类似的问题需要解决,但是它们似乎集中在联合的内存节省优势或将其用于互操作方面。 这是一个这样的问题的例子。 我对拥有工会类型的东西的渴望有所不同。 我现在正在编写一些代码,这些代码生成看起来像这样的对象 public class ValueWrapper { public DateTime ValueCreationDate; // ... other meta data about the value public object ValueA; public object ValueB; } 非常复杂的东西,我想您会同意的。问题是,ValueA也只能是一些特定类型的(比方说string,int和Foo(这是一个类),并ValueB可以是另一个小组的类型。我不喜欢处理这些值作为对象(我想要的温暖的贴身感觉的编码,并带有一些类型安全性)。 因此,我考虑编写一个琐碎的小包装器类,以表达ValueA在逻辑上是对特定类型的引用这一事实。我Union之所以打电话给全班,是因为我想达到的目标使我想起了C语言中的联合概念。 public class Union<A, B, C> { private readonly Type type; public readonly A a; public readonly B b; …

14
在C#中,为什么List <string>对象不能存储在List <object>变量中
似乎List对象不能存储在C#中的List变量中,甚至不能以这种方式显式转换。 List&lt;string&gt; sl = new List&lt;string&gt;(); List&lt;object&gt; ol; ol = sl; 结果无法将类型隐式转换System.Collections.Generic.List&lt;string&gt;为System.Collections.Generic.List&lt;object&gt; 然后... List&lt;string&gt; sl = new List&lt;string&gt;(); List&lt;object&gt; ol; ol = (List&lt;object&gt;)sl; 结果无法将类型转换System.Collections.Generic.List&lt;string&gt;为System.Collections.Generic.List&lt;object&gt; 当然,您可以通过将所有内容从字符串列表中拉出并一次放回一个列表中来完成此操作,但这是一个相当复杂的解决方案。



8
通用类型检查
有没有一种方法可以强制/限制传递给基元的类型? (布尔,整数,字符串等) 现在,我知道您可以通过where子句将泛型类型参数限制为类型或接口实现。但是,这并不适合基元(AFAIK),因为它们并不具有共同点(除了对象之前有人说过!:P)。 因此,我目前的想法是咬紧牙关,做一个大的switch语句,并在失败时抛出ArgumentException。 编辑1: 只是澄清一下: 代码定义应类似于: public class MyClass&lt;GenericType&gt; .... 和实例化: MyClass&lt;bool&gt; = new MyClass&lt;bool&gt;(); // Legal MyClass&lt;string&gt; = new MyClass&lt;string&gt;(); // Legal MyClass&lt;DataSet&gt; = new MyClass&lt;DataSet&gt;(); // Illegal MyClass&lt;RobsFunkyHat&gt; = new MyClass&lt;RobsFunkyHat&gt;(); // Illegal (but looks awesome!) 编辑2 @Jon Limjap-好点了,我已经考虑过了。.我确定有一种通用方法可以用来确定类型是值类型还是引用类型。 这在立即删除许多我不想处理的对象时可能很有用(但是您需要担心所使用的结构,例如Size)。有趣的问题不是吗?:) 这里是: where T : struct 取自MSDN。 我很好奇..这可以在.NET …

8
为什么C ++允许我将const char分配给const char * ?!
令我惊讶的是,它汇编为: const char* c_str() { static const char nullchar = '\0'; return nullchar; } 并且在我的代码中引入了一个错误。幸运的是,我抓住了它。 这是C ++故意还是编译器错误?是否有理由主动忽略数据类型? 它可以在Visual C ++ 2010和GCC中工作,但是鉴于明显的数据类型不匹配,我不明白为什么它应该工作。(static也没有必要。)

8
如何使数据绑定类型安全并支持重构?
当我希望将控件绑定到对象的属性时,必须提供属性名称作为字符串。这不是很好,因为: 如果该属性被删除或重命名,那么我不会收到编译器警告。 如果使用重构工具重命名该属性,则很可能不会更新数据绑定。 如果属性的类型错误,例如将整数绑定到日期选择器,那么直到运行时我都不会出错。 是否有一种设计模式可以解决此问题,但仍易于使用数据绑定? (这是WinForms,ASP.NET和WPF以及其他系统中的问题。) 现在,我发现“ C#中的nameof()运算符的变通办法:typesafe数据绑定”也为解决方案提供了良好的起点。 如果您愿意在编译代码后使用后处理器,那么NotifyPropertyWeaver值得一看。 当绑定是用XML而不是C#完成时,有人知道WPF的一种好的解决方案吗?
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.