请考虑以下代码:
void Handler(object o, EventArgs e)
{
// I swear o is a string
string s = (string)o; // 1
//-OR-
string s = o as string; // 2
// -OR-
string s = o.ToString(); // 3
}
Run Code Online (Sandbox Code Playgroud)
三种类型的铸造之间有什么区别(好吧,第三种不是铸造,但是你得到了意图).应该首选哪一个?
在编程接口时,我发现我正在进行大量的转换或对象类型转换.
这两种转换方法有区别吗?如果是,是否有成本差异或这对我的计划有何影响?
public interface IMyInterface
{
void AMethod();
}
public class MyClass : IMyInterface
{
public void AMethod()
{
//Do work
}
// Other helper methods....
}
public class Implementation
{
IMyInterface _MyObj;
MyClass _myCls1;
MyClass _myCls2;
public Implementation()
{
_MyObj = new MyClass();
// What is the difference here:
_myCls1 = (MyClass)_MyObj;
_myCls2 = (_MyObj as MyClass);
}
}
Run Code Online (Sandbox Code Playgroud)
另外,什么是"一般"首选方法?
可能重复:
c#中的以下强制转换之间有什么区别?
在C#中,铸造对象或使用as关键字有区别吗?希望这段代码能说明我的意思......
String text = "Hello hello";
Object obj = text;
String originalCast = ((String)obj).ToUpper();
String originalAs = (obj as String).ToUpper();
Run Code Online (Sandbox Code Playgroud)
谢谢
:)
哪个(如果有的话)更正确?为什么?
string someVariable = (string) someOtherVariable;
string someVariable = someOtherVariable.ToString();
string someVariable = someOtherVariable as string;
Run Code Online (Sandbox Code Playgroud)
我已经使用了所有三个,但我没有任何偏好或理解为什么一个比另一个好.
普通类型转换和使用"AS"关键字有什么区别?
在C#中,为什么要在使用"as"时转换引用类型?
铸造可以产生异常,而"as"将null在铸造失败时进行评估.
在所有情况下,"as"是否更容易使用引用类型?
例如:
MyObject as DataGridView
Run Code Online (Sandbox Code Playgroud)
而不是,
(DataGridView)MyObject
Run Code Online (Sandbox Code Playgroud) 可能重复:
转换:( NewType)与Object对象作为NewType
Casting vs使用CLR中的'as'关键字
//var gridView = (gridViewRow.NamingContainer as GridView); <-- works too
var gridView = (GridView)gridViewRow.NamingContainer;
Run Code Online (Sandbox Code Playgroud)
我对此的不完全理解是使用as关键字可以null在使用强制转换()时抛出异常.我的目标是能够问自己"我应该选择哪种方式?" 并知道如何回答它.
我已经遇到过这种情况并且感到困惑.
Cat c = new Cat("Fluffy");
return (Animal)c;
Cat c = new Cat("Fluffy");
return c as Animal;
Run Code Online (Sandbox Code Playgroud)
这两种语法都存在的原因是什么?
嘿,
我知道这可能是一个愚蠢的问题,但今天我怀疑这个问题.
这样做有什么区别
String text = (String) variable;
Run Code Online (Sandbox Code Playgroud)
和
String text = variable as String;
Run Code Online (Sandbox Code Playgroud)
?
object myObject = "Hello world.";
var myString = myObject as string;
Run Code Online (Sandbox Code Playgroud)
object myObject = "Hello world.";
var myString = (string)myObject;
Run Code Online (Sandbox Code Playgroud)
我已经看到两种方式都进行了类型转换.有什么不同?