gpt4 book ai didi

c# - 使用 Type 变量转换变量

转载 作者:IT王子 更新时间:2023-10-29 03:28:58 25 4
gpt4 key购买 nike

在 C# 中,我可以将类型为 object 的变量转换为类型为 T 的变量,其中 T 是在 Type 中定义的 变量?

最佳答案

这是一个转换和转换的例子:

using System;

public T CastObject<T>(object input) {
return (T) input;
}

public T ConvertObject<T>(object input) {
return (T) Convert.ChangeType(input, typeof(T));
}

编辑:

评论里有人说这个回答没有回答问题。但是行 (T) Convert.ChangeType(input, typeof(T)) 提供了解决方案。 Convert.ChangeType 方法尝试将任何对象转换为作为第二个参数提供的类型。

例如:

Type intType = typeof(Int32);
object value1 = 1000.1;

// Variable value2 is now an int with a value of 1000, the compiler
// knows the exact type, it is safe to use and you will have autocomplete
int value2 = Convert.ChangeType(value1, intType);

// Variable value3 is now an int with a value of 1000, the compiler
// doesn't know the exact type so it will allow you to call any
// property or method on it, but will crash if it doesn't exist
dynamic value3 = Convert.ChangeType(value1, intType);

我已经用泛型写了答案,因为我认为当你想要将 a something 转换为 a something else 时,这很可能是代码味道的标志处理实际类型。使用适当的接口(interface),99.9% 的时间都不需要。可能存在一些边缘情况,当涉及到反射时它可能是有意义的,但我建议避免这些情况。

编辑 2:

一些额外的提示:

  • 尽量使您的代码保持类型安全。如果编译器不知道类型,那么它就无法检查您的代码是否正确,并且自动完成之类的东西将无法工作。简单地说:如果您无法在编译时预测类型,那么编译器将如何能够
  • 如果你正在使用的类 implement a common interface ,您可以将该值转换为该接口(interface)。否则请考虑创建您自己的接口(interface)并让类实现该接口(interface)。
  • 如果您使用的是动态导入的外部库,那么还要检查一个通用接口(interface)。否则请考虑创建实现该接口(interface)的小型包装类。
  • 如果您想调用对象,但不关心类型,则将值存储在对象dynamic 中。变量。
  • Generics可以很好地创建适用于许多不同类型的可重用代码,而无需知道所涉及的确切类型。
  • 如果您遇到困难,请考虑采用不同的方法或代码重构。您的代码真的必须如此动态吗?它是否必须考虑存在的任何类型?

关于c# - 使用 Type 变量转换变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/972636/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com