先看一個字符串動態轉換的典型例子
如下函數
這個函數希望實現比較value 是否在minValue
value in [minValue
public static bool MyComparer(object value
要解決這個問題
首先我們來看如何進行比較
所有的基本值類型和string 類型都實現 IComparable這個接口
下面我們就來討論如何將字符串動態轉換為指定的值類型
我們需要實現下面的函數
public static object ToType(Type type
type 為指定的類型
首先我們知道所有的基本值類型都有一個叫 Parse 靜態函數
下面代碼給出如何反射出這個靜態函數
| BindingFlags
然後我們判斷這個函數的名稱是否為
所以我們需要判斷mi 只有一個參數
MethodInfo parseMethod = null;
foreach (MethodInfo mi in type
| BindingFlags
{
if (mi
{
parseMethod = mi;
break;
}
}
接下來就是如何調用這個函數來動態轉換字符串了
如下面代碼
parseMethod
下面給出字符串動態轉換為指定類型的完整代碼
using System;
using System
using System
using System
namespace Eagelt
{
public class ConvertString
{
public static object ToType(Type type
{
if (type == typeof(string))
{
return value;
}
MethodInfo parseMethod = null;
foreach (MethodInfo mi in type
| BindingFlags
{
if (mi
{
parseMethod = mi;
break;
}
}
if (parseMethod == null)
{
throw new ArgumentException(string
}
return parseMethod
}
}
}
MyComparer 函數的完整代碼
public static bool MyComparer(object value
{
IComparable comparableObj = value as IComparable;
object min;
object max;
if (comparableObj == null)
{
throw new ArgumentException(string
}
min = ConvertString
max = ConvertString
return comparableObj
測試代碼
Console
Console
Console
Console
Console
測試結果
True
False
True
False
False
最後提一個簡單的問題
如何實現呢?
比如我們有一個結構
struct UInt
{
public ulong Low;
public ulong High;
}
我們將這個結構的實例對象傳入到函數
Console
這樣可以嗎?怎樣做才能做到呢?
From:http://tw.wingwit.com/Article/program/net/201311/11386.html