using System; using System.Globalization; public class StringParsing { public static void Main() { string numericString; NumberStyles styles; numericString = "10677"; styles = NumberStyles.Integer; CallTryParse(numericString, styles); } private static void CallTryParse(string stringToConvert, NumberStyles styles) { Console.WriteLine(stringToConvert); short number; bool result = Int16.TryParse(stringToConvert, styles,CultureInfo.InvariantCulture, out number); if (result) Console.WriteLine(stringToConvert, number); else Console.WriteLine("failed."); } }
Software Development
software development notes, main category for Cs, Java, and other programming experiences.
InvalidCastException
using System; class MainClass { public static void Main() { try { MainClass MyObject = new MainClass(); IFormattable Formattable; Formattable = (IFormattable)MyObject; } catch(InvalidCastException) { Console.WriteLine("MyObject does not implement the IFormattable interface."); } } }
Conversion Lookup
/* A Programmer's Introduction to C# (Second Edition) by Eric Gunnerson Publisher: Apress L.P. ISBN: 1-893115-62-3 */ // 24 - User-Defined ConversionsHow It WorksConversion Lookup // copyright 2000 Eric Gunnerson public class ConversionLookup { public static void Main() { S myS = new S(); TBase tb = (TBase) myS; } } public class S { public static implicit operator T(S s) { // conversion here return(new T()); } } public class TBase { } public class T: TBase { }
Classes and Pre and Post Conversions
/* A Programmer's Introduction to C# (Second Edition) by Eric Gunnerson Publisher: Apress L.P. ISBN: 1-893115-62-3 */ // 24 - User-Defined ConversionsClasses and Pre and Post Conversions // copyright 2000 Eric Gunnerson using System; using System.Text; public class ClassesandPreandPostConversions { public static void Main() { // implicit conversion section RomanNumeralAlternate roman; roman = new RomanNumeralAlternate(55); BinaryNumeral binary = roman; // explicit conversion section BinaryNumeral binary2 = new BinaryNumeral(1500); RomanNumeralAlternate roman2; roman2 = (RomanNumeralAlternate) binary2; } } class RomanNumeral { public RomanNumeral(short value) { if (value > 5000) throw(new ArgumentOutOfRangeException()); this.value = value; } public static explicit operator RomanNumeral( short value) { RomanNumeral retval; retval = new RomanNumeral(value); return(retval); } public static implicit operator short( RomanNumeral roman) { return(roman.value); } static string NumberString( ref int value, int magnitude, char letter) { StringBuilder numberString = new StringBuilder(); while (value >= magnitude) { value -= magnitude; numberString.Append(letter); } return(numberString.ToString()); } public static implicit operator string( RomanNumeral roman) { int temp = roman.value; StringBuilder retval = new StringBuilder(); retval.Append(RomanNumeral.NumberString(ref temp, 1000, 'M')); retval.Append(RomanNumeral.NumberString(ref temp, 500, 'D')); retval.Append(RomanNumeral.NumberString(ref temp, 100, 'C')); retval.Append(RomanNumeral.NumberString(ref temp, 50, 'L')); retval.Append(RomanNumeral.NumberString(ref temp, 10, 'X')); retval.Append(RomanNumeral.NumberString(ref temp, 5, 'V')); retval.Append(RomanNumeral.NumberString(ref temp, 1, 'I')); return(retval.ToString()); } public static implicit operator BinaryNumeral(RomanNumeral roman) { return(new BinaryNumeral((short) roman)); } public static explicit operator RomanNumeral( BinaryNumeral binary) { return(new RomanNumeral((short)(int) binary)); } private short value; } class BinaryNumeral { public BinaryNumeral(int value) { this.value = value; } public static implicit operator BinaryNumeral( int value) { BinaryNumeral retval = new BinaryNumeral(value); return(retval); } public static implicit operator int( BinaryNumeral binary) { return(binary.value); } public static implicit operator string( BinaryNumeral binary) { StringBuilder retval = new StringBuilder(); return(retval.ToString()); } private int value; } class RomanNumeralAlternate : RomanNumeral { public RomanNumeralAlternate(short value): base(value) { } public static implicit operator string( RomanNumeralAlternate roman) { return("NYI"); } }
User-Defined Conversions:A Simple Example
/* A Programmer's Introduction to C# (Second Edition) by Eric Gunnerson Publisher: Apress L.P. ISBN: 1-893115-62-3 */ // 24 - User-Defined ConversionsA Simple Example // copyright 2000 Eric Gunnerson using System; using System.Text; struct RomanNumeral { public RomanNumeral(short value) { if (value > 5000) throw(new ArgumentOutOfRangeException()); this.value = value; } public static explicit operator RomanNumeral(short value) { RomanNumeral retval; retval = new RomanNumeral(value); return(retval); } public static implicit operator short(RomanNumeral roman) { return(roman.value); } static string NumberString(ref int value, int magnitude, char letter) { StringBuilder numberString = new StringBuilder(); while (value >= magnitude) { value -= magnitude; numberString.Append(letter); } return(numberString.ToString()); } public static implicit operator string( RomanNumeral roman) { int temp = roman.value; StringBuilder retval = new StringBuilder(); retval.Append(RomanNumeral.NumberString(ref temp, 1000, 'M')); retval.Append(RomanNumeral.NumberString(ref temp, 500, 'D')); retval.Append(RomanNumeral.NumberString(ref temp, 100, 'C')); retval.Append(RomanNumeral.NumberString(ref temp, 50, 'L')); retval.Append(RomanNumeral.NumberString(ref temp, 10, 'X')); retval.Append(RomanNumeral.NumberString(ref temp, 5, 'V')); retval.Append(RomanNumeral.NumberString(ref temp, 1, 'I')); return(retval.ToString()); } private short value; } public class UserDefinedConversionsASimpleExample { public static void Main() { short s = 12; RomanNumeral numeral = new RomanNumeral(s); s = 165; numeral = (RomanNumeral) s; Console.WriteLine("Roman as int: {0}", (int)numeral); Console.WriteLine("Roman as string: {0}", (string)numeral); short s2 = numeral; } }
Conversions of Classes (Reference Types):To the Base Class of an Object
using System; class Base { public virtual void WhoAmI() { Console.WriteLine("Base"); } } class Derived: Base { public override void WhoAmI() { Console.WriteLine("Derived"); } } public class TotheBaseClassofanObject { public static void Main() { Derived d = new Derived(); Base b = d; b.WhoAmI(); Derived d2 = (Derived) b; object o = d; Derived d3 = (Derived) o; } }
Conversions of Classes (Reference Types)To an Interface the Object Might Implement
/* A Programmer's Introduction to C# (Second Edition) by Eric Gunnerson Publisher: Apress L.P. ISBN: 1-893115-62-3 */ // 15 - ConversionsConversions of Classes (Reference Types)To an Interface // the Object Might Implement // copyright 2000 Eric Gunnerson using System; interface IDebugDump { string DumpObject(); } class Simple { public Simple(int value) { this.value = value; } public override string ToString() { return(value.ToString()); } int value; } class Complicated: IDebugDump { public Complicated(string name) { this.name = name; } public override string ToString() { return(name); } string IDebugDump.DumpObject() { return(String.Format( "{0} Latency: {1} Requests: {2} Failures: {3} ", new object[] {name, latency, requestCount, failedCount} )); } string name; int latency = 0; int requestCount = 0; int failedCount = 0; } public class ToanInterfacetheObjectMightImplement { public static void DoConsoleDump(params object[] arr) { foreach (object o in arr) { IDebugDump dumper = o as IDebugDump; if (dumper != null) Console.WriteLine("{0}", dumper.DumpObject()); else Console.WriteLine("{0}", o); } } public static void Main() { Simple s = new Simple(13); Complicated c = new Complicated("Tracking Test"); DoConsoleDump(s, c); } }