首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > C# >

出一个题目,200分,考考你:该如何处理

2011-12-28 
出一个题目,200分,考考你:怎么实现函数ChangeType,能达到如下功能?int a ChangeType( Object,a.GetType()

出一个题目,200分,考考你:
怎么实现函数ChangeType,能达到如下功能? 
 
int a= ChangeType( Object,a.GetType());
string b= ChangeType( Object,b.GetType());
bool c= ChangeType( Object,c.GetType());
 
就是根据前面的类型自动实现转换Object为该强类型?
 
支持常规的int,String,bool等类型就可以.
 
.Net2.0实现,和.Net3.0以上实现.

注意:
Convert.ChangeType实现不了这个功能.
因为他还需要强制转换,如:int i = (int)Convert.ChangeType(d, typeof(int));

 

[解决办法]
能力不够,专业路过!
[解决办法]
路过,帮顶
[解决办法]
你们公司的面试题吗!?
[解决办法]
先占位
[解决办法]
占个位先!!
[解决办法]
这题不难吧.......

既然你是规定可以用函数实现...

既然你规定了2个传入参数。。。

那结果不就出来了么,过程不过是些判断。比如 "s"强行转换成 int的话 是直接抛出异常 还是给一个ascii值。 等等。
[解决办法]
路过,围观。。。。。。。。
[解决办法]
俺是来参观的,呵呵
[解决办法]
先占位
[解决办法]
void ChangeType<T>(Object o, typeof(T), out T result)
{
result = (T)Convert.ChangeType(o, typeof(T));
}

int a;
ChangeType<int>(o, a.GetType(), out a);

[解决办法]

探讨
void ChangeType<T>(Object o, typeof(T), out T result)
{
result = (T)Convert.ChangeType(o, typeof(T));
}

int a;
ChangeType<int>(o, a.GetType(), out a);

[解决办法]
瞄一眼.....
[解决办法]
这个是不可能,你若是希望ChangeType有时的返回类型是int,有时是string,这岂不是开玩笑。除非定义一个泛型版本的ChangeType:

public T ChangeType<T>(object obj)
{
return T(obj);
}
[解决办法]
你的意思是传一个值,自动转换类型,是数字就INT 是bit就bool 是文字就STRING 撒

这不就是一个判断的问题了么了,如果你BIT 传的是 true 这种 不是 0或1 那就好办,直接判断啊 是否是bool 如果是不 的话就 强制转换INT 啊 有异常就说明只是string类型了啊。
[解决办法]
抱歉,看成C++了,原来以为函数重载就可以了……
[解决办法]
路过!!! 有点难度!
[解决办法]
C# code
class Program    {        static void Main(string[] args)        {            Object ob = 3;            int a = ChangeType<int>(ob);            Console.WriteLine(a.GetType());            Console.WriteLine(a);            Console.WriteLine(ChangeType<string>(ob).GetType());        }        static T ChangeType<T>(object oj)        {            T result = (T)Convert.ChangeType(oj, typeof(T));            return result;        }    }
[解决办法]
LZ,你所说的转换都不是问题。有点障眼法的意思,我开始以为你只是需要转换。
如果只需要转换的话把void函数就行,在里面把值赋给全局变量 到时候取就可以

你不如这样问:
C# code
怎么让一个函数既能返回int值又能返回string值,还能反回bool值 


[解决办法]
先做个记号,有时间接着研究。
[解决办法]

探讨
C# code
class Program
{
static void Main(string[] args)
{
Object ob = 3;
int a = ChangeType<int>(ob);
Console.WriteLine(a.GetType());
……

[解决办法]
路过~
[解决办法]
泛型就可以了.17楼的就有点样子了。函数里弄好异常处理就可以了。
不知道为什么会放200分。可能是我没看到题目的精髓处吧
要么就是楼主是新手或者是从别的语言过来的没有泛型概念。
[解决办法]
探讨
void ChangeType<T>(Object o, typeof(T), out T result)
{
result = (T)Convert.ChangeType(o, typeof(T));
}

int a;
ChangeType<int>(o, a.GetType(), out a);

[解决办法]
public interface TypeConverter
{
 public Object convertValue(Map context, Object target, Member member, String propertyName, Object value, Class toType);
}




ognl源代码,不知道NET有没有对应版本。改改即可!
[解决办法]
获得3个MSVIP称号,怎么可能是对C#泛型不了解的人呢。
[解决办法]
接分 路过 不懂 !!!!!!!
[解决办法]
探讨
LZ,你所说的转换都不是问题。有点障眼法的意思,我开始以为你只是需要转换。
如果只需要转换的话把void函数就行,在里面把值赋给全局变量 到时候取就可以

你不如这样问:

C# code

怎么让一个函数既能返回int值又能返回string值,还能反回bool值



是这样吧?

[解决办法]
不用泛型解决不了
除非写N个函数(函数名称不相同,重载都重载不了!)
泛型楼上有了,哈哈,接分也!
[解决办法]
走着说吧 先顶一下
[解决办法]
能力不够,专业路过!
[解决办法]
路过 留个记号
[解决办法]
仅仅泛型是没法解决的, 我能想到的 就是执行动态语句,,
[解决办法]
代码的内部很好工作,假设传入的参数是 obj,deltailType

switch(detailType)
{
case "System.Int32":
return (int)Convert.ChangeType(obj,int);
case "System.Boolean":
return (bool)Convert.ChangeType(obj,bool);
default:
return obj.ToString();
}

但是,你的函数签名怎么写?

写成int ChangeType(object obj,Type detailType),返回不了bool类型
写成bool ChangeType(object obj,Type detailType),返回不了int类型
两个都写上去?编译器不认

写成object ChangeType(object obj,Type detailType),你返回的是object,仍然要再去转换成int或者bool

楼主,你这个问题我之前也想过,但是最后发现这个在目前无法实现

[解决办法]
原因就是因为.NET是强类型语言
如javascript之类的弱类型语言,应该能实现
[解决办法]
路过,呵呵
[解决办法]
用动态编译肯定可以的。
[解决办法]
不知道这样可不可以
static object ChangeType(object o,Type t)


{
if (t.Name == "Int32")
return (int)o;
else
{
return (string)o;
}
}
调用时
var a=ChangeType(1,typeof(int));
Console.WriteLine(a.GetType());
Console.ReadKey();
[解决办法]
路过而已。
[解决办法]
能力不够,专业路过!

热点排行