Tag: 类型转换

TryParse Nullable类型通常

我为以下Nullable类型编写了重载的静态TryParse方法: int? , short? long? , double? , DateTime? , decimal? , float? , bool? , byte? 和char? 。 以下是一些实现: protected static bool TryParse(string input, out int? value) { int outValue; bool result = Int32.TryParse(input, out outValue); value = outValue; return result; } protected static bool TryParse(string input, out short? value) { short outValue; bool […]

应用于通用枚举集合的Cast .Cast 会导致无效的强制转换exception

enum Gender { Male, Female } var k = new[] { Gender.Male }.Cast().ToList().Cast().ToList(); //alright var p = new[] { Gender.Male }.Cast().Cast().ToList(); //InvalidCastException 第二种情况的原因是什么? 我知道我不能把一个盒装的enum为int? 直接,但我做了两个阶段的转换,即Cast.Cast应该正常工作。 编辑: 考虑到以下工作,这是令人惊讶的: object o = Gender.Male; int i = (int)o; // so here the cast is not to an entirely different type, which works

Int到十进制转换 – 在指定位置插入小数点

我有以下int 7122960 我需要将其转换为71229.60 有关如何将int转换为小数并将小数点插入正确位置的任何想法?

扩展Convert.ChangeType以根据请求生成用户定义的类型

鉴于课程: public class Foo { public string Name { get; set; } } 是否可以通过Convert.ChangeType从字符串创建Foo实例: Type type = typeof(Foo); object value = “one”; value = System.Convert.ChangeType(value, type); 这是第三方API尝试重建对象的方式。 有人提到这可能是隐式运算符,但根据我的理解,这将让我做以下操作,而不是创建对象: Foo foo = new Foo() { Name = “one” }; string fooAsString = foo; // implicit conversion — no cast needed 有没有办法以这种方式创建对象? 此外,如果有另一种方法,我可以更改Convert.ChangeType。 更新:我问的原因是因为它抛出exception: 从’System.String’到’JibbaJabba + Foo’的转换无效。 […]

C#隐式转换和==运算符

上下文的一些代码: class a { } class b { public aa{get;set;} public static implicit operator a(bb) { return ba; } } aa=null; bb=null; a = b; //compiler: cannot apply operator ‘==’ to operands of type tralala… bool c = a == b; 是否可以在不同的类型实例上使用==运算符,其中一个可以隐式转换为另一个? 我错过了什么? 编辑: 如果类型必须是相同的调用==,那么为什么 int a=1; double b=1; bool c=a==b; 作品?

将类的对象转换为另一个对象

我有两个类几乎相同,除了存储在它们中的数据类型。 一个类包含所有double值,而other包含所有float值。 class DoubleClass { double X; double Y; double Z; } class FloatClass { float X; float Y; float Z; } 现在我有一个DoubleClass点,我想转换为FloatClass。 var doubleObject = new DoubleClass(); var convertedObject = (FloatClass)doubleObject; // TODO: This 一种简单的方法是创建一个创建新FloatClass对象的方法,填充所有值并返回它。 有没有其他有效的方法来做到这一点。

将枚举转换为列表

假设我有以下枚举值 enum Language { CSharp= 0, Java = 1, VB = 2 } 我想将它们转换为值列表(即) { CSharp,Java,VB}. 如何将它们转换为值列表?

一般类型转换没有exception的风险

我正在研究一个可以采用多种不同数据类型的控件(任何实现IComparable的数据类型)。 我需要能够将这些与传入的另一个变量进行比较。 如果主数据类型是DateTime,并且我传递了一个String,我需要 尝试将String转换为DateTime以执行日期比较。 如果String无法转换为DateTime,则执行String比较。 所以我需要一种通用的方法来尝试从任何类型转换为任何类型。 很简单,.Net为我们提供了TypeConverter类。 现在,我可以做的最好的事情是确定String是否可以转换为DateTime是使用exception。 如果ConvertFrom引发exception,我知道我不能进行转换并且必须进行字符串比较。 以下是我得到的最好的: string theString = “99/12/2009”; DateTime theDate = new DateTime ( 2009, 11, 1 ); IComparable obj1 = theString as IComparable; IComparable obj2 = theDate as IComparable; try { TypeConverter converter = TypeDescriptor.GetConverter ( obj2.GetType () ); if ( converter.CanConvertFrom ( obj1.GetType () ) ) { […]

Convert.ToInt16和(Int16)有什么区别

我有一段代码 try { object s = new object(); s = 10; Console.WriteLine(“{0}”, Convert.ToInt16(s)); Console.WriteLine(“{0}”, (Int16)s); } catch (InvalidCastException ex) { Console.WriteLine(ex.Message); Console.ReadLine(); } 在此基础上我有很多问题.. 1)Convert.ToInt16()和(Int16)都是拆箱操作 2)如果两者都与Unboxing有关,那么为什么它们是不同的。 因为上面的代码在Console.WriteLine(“{0}”, (Int16)s);时显示以下错误Console.WriteLine(“{0}”, (Int16)s); 线符合 错误: 指定演员表无效 3)据我所知(Int16)是常规的转换和Convert.ToInt16()是类型安全转换。 但是这些不同之处呢? 也许这是一个愚蠢的问题,但我很困惑。 请为我澄清这一点并纠正我错在哪里。

最有效的Dictionary .ToString()格式化?

将Dictionary转换为格式化字符串的最有效方法是什么。 例如: 我的方法: public string DictToString(Dictionary items, string format){ format = String.IsNullOrEmpty(format) ? “{0}='{1}’ ” : format; string itemString = “”; foreach(var item in items){ itemString = itemString + String.Format(format,item.Key,item.Value); } return itemString; } 有更好/更简洁/更有效的方式吗? 注意:字典最多有10个项目,如果存在另一个类似的“键值对”对象类型,我就不会使用它 另外,既然我无论如何都会返回字符串,那么通用版本会是什么样子?