Tag: 类型

约束类型允许C#中的加/减操作(+/-)

这可能吗? public interface Foo where TBar : (can use the ‘+’ and ‘-‘ operators) 谢谢。

Json.NET中的JConstructor和JRaw

根据StackOverflow上的这个答案: Json.NET包含许多不属于JSON规范的function。 特别是,它允许解析一些“正式”无效的JSON文件。 这包括不带引号的属性,注释,构造函数等。 这些是从JToken分配的所有类型: JArray JConstructor JContainer JObject JProperty JRaw JValue 请告诉我们以下是否属实: “正式”有效的json上的JToken.Parse(json)在其后代中包含JConstructor或JRaw 。 如果json是“正式”有效的,那么在这些后代中只能看到以下类型: JArray , JObject , JProperty , JValue 。

在C#中是否有任何Int24实现?

我正在处理一个项目,我需要一个.NET BCL中不存在的数据类型 – 一个Unsigned Int24。 对于我正在进行的计算,int32中的第4个字节,即使设置为全零,也会搞砸我的结果。 编辑:我在24位整数空间上进行逐位循环移位,仅限于24位。 如果在32位数字上以24位执行旋转,则结果非常不正确。 有谁知道这种数据类型的任何第三方实现可用吗? 谢谢!

vb / c#十进制内部格式

VB或C#中“十进制”值的内部格式是什么? 我不知道这对我正在做的任何事都很重要,但这是很有趣的事情之一。 比如,知道有多少位以及负数如何存储可能意味着当你看到一个负数出现在你预期的正面时,你可以立刻想到,“啊,有一个溢出”而不是被深深的黑暗奥秘困惑。

有没有办法确定generics类型是否是从特定的generics类型定义构建的?

我有一个通用的方法: Func<IEnumerable, bool> CreateFunction() 其中T可以是任意数量的不同类型。 这个方法使用reflection做一堆东西,如果T是一个IDictionary ,不管字典的TKey和TValue我需要执行字典特定的代码。 所以可以调用该方法: var f = CreateFunction(); var f0 = CreateFunction(); var f1 = CreateFunction<IDictionary>(); var f2 = CreateFunction<Dictionary>(); var f3 = CreateFunction<SomeDerivedDictionaryType>(); 等等 根据@Andy的回答澄清 最后我想知道Tinheritance自/实现IDictionary即使T本身是Dictionary或从该接口派生的其他类型。 if(typeof(T) == typeof(IDictionary) 不起作用,因为T是generics类型而不是generics类型定义。 并且在不知道TKey和TValue (在编译时不知道)的情况下,我无法对运行时我知道的任何具体类型进行比较。 我唯一想到的就是查看类型的名称或者用reflection检查它的方法,寻找能让我相信它是字典的方法(即查找ContainsKey和get_Item )。 有没有直接的方法来做出这种决定?

System.Convert.ToInt vs(int)

我在另一篇文章中注意到有人做了类似的事情: double d = 3.1415; int i = Convert.ToInt32(Math.Floor(d)); 他们为什么使用转换函数,而不是: double d = 3.1415; int i = (int)d; 它有一个隐含的底层和转换。 另外,更关注的是,我在一些生产代码中注意到我正在阅读: double d = 3.1415; float f = Convert.ToSingle(d); 是这样的: float f = (float)d; 是否所有这些隐式转换只是在Convert类中是为了完整性,还是它们是否有用? 我可以理解需要.ToString(),但不是其他的。

给定C#类型,获取其基类和实现的接口

我正在研究C#中的游戏引擎。 我正在研究的课程名为CEntityRegistry ,它的工作是跟踪游戏中CEntity的许多实例。 我的目标是能够使用给定类型查询CEntityRegistry ,并获取该类型的每个CEntity的列表。 因此,我想做的是维护一张地图: private IDictionary<Type, HashSet> m_TypeToEntitySet; 并因此更新注册表: private void m_UpdateEntityList() { foreach (CEntity theEntity in m_EntitiesToRemove.dequeueAll()) { foreach (HashSet set in m_TypeToEntitySet.Values) { if (set.Contains(theEntity)) set.Remove(theEntity); } } foreach (CEntity theEntity in m_EntitiesToAdd.dequeueAll()) { Type entityType = theEntity.GetType(); foreach (Type baseClass in entityType.GetAllBaseClassesAndInterfaces()) m_TypeToEntitySet[baseClass].Add(theEntity); } } 我Type.GetAllBaseClassesAndInterfaces的问题是没有函数Type.GetAllBaseClassesAndInterfaces – 我将如何编写它?

如何获取变量的编译时类型?

我正在寻找如何为调试目的获取变量的编译时类型。 测试环境可以简单地再现: object x = “this is actually a string”; Console.WriteLine(x.GetType()); 哪个会输出System.String 。 我怎么能在这里获得编译时类型System.Object ? 我看了一下System.Reflection ,但却失去了它提供的可能性。

在int和string中装箱和拆箱

我在拳击和拆箱方面有点困惑。 根据其定义 Boxing是ValueTypes到引用类型(Object)的隐式转换。 UnBoxing是将引用类型(Object)显式转换为其等效的ValueTypes。 描述这个的最好例子是 int i = 123; object o = i; // boxing 和 o = 123; i = (int)o; // unboxing 但我的问题是int是否是值类型而字符串是引用类型 int i = 123; string s = i.ToString(); 和 s = “123”; i = (int)s; 这是拳击和拆箱的例子吗?

JSON.NET使用Type参数反序列化为对象

我有以下问题,我无法解决: 我有不同的类,它们都实现了一个名为IProtocol的接口。 目前,它们被命名为SimpleProtocol , ParallelProtocol 。 我想坚持这些对象,所以我使用了JSON.NET,一切正常。 除非我试图反序列化它们,当我知道它们应该是什么类型时,它会完美地工作,例如: SimpleProtocol p = JsonConvert.DeserializeObject(myJsonData); 但是,我现在处于这样一种情况:我想加载JSON数据并获得IProtocol ,但这是可以理解的,JSON不允许这样做; 例如,这样的东西不起作用: IProtocol p1 = JsonConvert.DeserializeObject(myJsonData); // does not work IProtocol p2 = (IProtocol)JsonConvert.DeserializeObject(myJsonData); // also, does not work 所以,查找API我发现了这个方法签名: public static Object DeserializeObject( string value, Type type ) 看起来就像我需要的东西,所以通过在字符串中保存类型并检索它来尝试: // test Type protocolType = Type.GetType(“MyApp.Protocols.SimpleProtocol”); IProtocol p1 = JsonConvert.DeserializeObject(myJsonData, protocolType); 我得到一个错误,就是不可能将Newtonsoft.Json.Linq.JObject […]