C# “C”;作为「;运算符和高级转换在循环/函数和out/ref参数修饰符和typeof()中的使用
我需要澄清一下: is/as操作员 输出/参考参数修改器 类型 只回答你知道的或你想回答的问题,如果你不想回答,就不要回答整个问题 是的,我要求澄清这些。纠正我或补充我已经说过的话 嗯,我在谷歌上搜索了一下,登陆了各种网站,MSDN等等。我仍然需要有人编写一些代码来帮助我澄清整个概念,并最终让我充分利用它,希望这对其他人也有帮助 基本上这就是我所理解的: A) 是 伪码 如果对象是此类型,则返回true,否则返回false 简单。还是我做错了什么 某些类型是否存在任何限制或问题 这段代码运行得很好,所以我想我得到了这个好消息C# “C”;作为「;运算符和高级转换在循环/函数和out/ref参数修饰符和typeof()中的使用,c#,out,ref,typeof,C#,Out,Ref,Typeof,我需要澄清一下: is/as操作员 输出/参考参数修改器 类型 只回答你知道的或你想回答的问题,如果你不想回答,就不要回答整个问题 是的,我要求澄清这些。纠正我或补充我已经说过的话 嗯,我在谷歌上搜索了一下,登陆了各种网站,MSDN等等。我仍然需要有人编写一些代码来帮助我澄清整个概念,并最终让我充分利用它,希望这对其他人也有帮助 基本上这就是我所理解的: A) 是 伪码 如果对象是此类型,则返回true,否则返回false 简单。还是我做错了什么 某些类型是否存在任何限制或问题 这段代码运行得很
object s = new SqlBoolean();
if (s is SqlBoolean)
{
Console.WriteLine("Is SqlBoolean");
Console.ReadLine();
}
2) as
那么我还是要充分理解这一点
MSDN报告:
as运算符用于在兼容对象之间执行转换
类型。as运算符类似于强制转换,只是在
转换失败,而不是引发异常
我在一个对象数组上尝试了一个循环,它基本上只转换原语,并且有很多问题(每次施放都会抛出null或其他东西)
即
执行此操作将正常,输出将为20
移除两个ref将输出20 10
(ref直接更改外部声明的x,而不在方法中创建实例)
我们出去怎么样?有什么用???
我搞不懂。从某个地方读取,它看起来像是一个参数,与ref的作用相同,但它让您不知何故拥有一些输出参数
在前面显示的代码中使用out而不是ref只会产生IntelliSense的编译错误,我甚至不知道如何获取这些out参数来显示
在我正在做的项目中,我使用以下代码:
public static Array check(string country, string vatNum)
{
bool valid;
string name;
string address;
checkVatService vatchecker = new checkVatService();
vatchecker.checkVat(ref country, ref vatNum, out valid, out name, out address);
return new object[] {country,
vatNum,
valid,
name,
address
};
}
现在,checkVat是来自
我看到它有out参数,它们是由wsdl web服务消费库从web服务网站()生成的
如何使用out参数?它们是否有一些输出而不使用return?我如何使用它们?请详细说明
4) typeof
这将从System.type返回您传递给它的类型
首先,我想我可以得到我传递给它的任何对象的类型,就像
int x;
SqlBoolean xy = new SqlBoolean();
typeof(x) // integer
typeof(xy) // SqlBoolean
但事实并非如此
它只是从System.type返回类型
像
typeof(int).ToString()//System.Int32或类似的东西
typeof(xy).ToString()//System.Data.SqlTypes.sqlboolean
我真的不知道该怎么办
要获得一个对象的类型,你必须做一些事情,比如从一个对象获取类型
那么typeof的实际用途是什么?我还缺少什么呢
谢谢大家大问题。。小回答:
null
。如果是的话,演员阵容就失败了ref
通过引用传递对象(注意:仍然通过值语义传递!)<代码>输出表示在函数退出之前必须分配一个变量typeof
的问题。如果你不明白为什么它会有用,那么最好忽略它的使用(实际上,任何东西都是如此)2) as运算符的用途是抑制错误大小写的异常,以便在转换错误时抛出null。
3) 参考请参考下面的链接,这里给出了详细的解释
4) out参数通常用于需要从函数返回多个值的情况。一个值使用return语句直接返回,另一个值使用out参数返回。 例如,明确理解是指。您可以在那里找到jon skeet的优秀文章。
5) 可能会出现这样的情况,即您希望检查对象的类型以执行ceratain操作,但大多数情况下,根据RTTI设计原则,不应使用这种方法。a)问题是您答对了 b) 也许这会带来一些光- 及 对于其余部分和以上部分,本codeproject教程(分两部分)可能会有所帮助:
typeof、GetType、is都是不同的,可以输出不同的结果。因为有我见过的最简单的解释
ref和out 默认情况下,方法的参数是按值传递的,这意味着参数的值在传递给方法时被复制。如果有
foo(inty){y=9;}main(){intx=5;foo(x);}
,方法foo将x的值复制到y,然后为y指定一个不同的值。x仍然保持为5。如果有引用类型参数,例如Foo(objecty y){y=null;}main(){object x=new object();Foo(x);}
,则y包含复制的x值,该值是引用值,而不是对象本身。因此,对y所做的更改也不会反映在x中。相反,ref和out是通过引用传递的:
// Example of ref:
// p DOES NOT copy x's reference value of the object
// p is x (or refer to the same memory as x)
class Ref_Example
{
static void Foo(ref int p) { p = 8};
static void Main() {
int x = 5; Foo(ref x);
Console.WriteLine(x); // output: 8
}
}
// Example of out:
// out = ref, except variables need not be assigned before method is called
// You use out when you have to return multiple values from a function
Class Out_Example
{
static void Find_Synonyms(
string vocab, out string synonymA, out string synonymB)
{ // Lookup the synonyms of the word "rich" };
static void Main()
{
string a, b;
Find_Synonyms("rich", a, b);
Console.WriteLine(a); // abundant
Console.WriteLine(b); // affluent
}
当然,您可以中断ref/out的设计目的,并通过为变量分配初始值来使用ref代替out,但这没有逻辑意义,可能会混淆代码读取器。(即,在搜索同义词之前,您如何知道这些同义词?为什么为其指定了不正确的初始值?等等)
进一步说明: int=
System.Int32
和<
int x;
SqlBoolean xy = new SqlBoolean();
typeof(x) // integer
typeof(xy) // SqlBoolean
// Example of ref:
// p DOES NOT copy x's reference value of the object
// p is x (or refer to the same memory as x)
class Ref_Example
{
static void Foo(ref int p) { p = 8};
static void Main() {
int x = 5; Foo(ref x);
Console.WriteLine(x); // output: 8
}
}
// Example of out:
// out = ref, except variables need not be assigned before method is called
// You use out when you have to return multiple values from a function
Class Out_Example
{
static void Find_Synonyms(
string vocab, out string synonymA, out string synonymB)
{ // Lookup the synonyms of the word "rich" };
static void Main()
{
string a, b;
Find_Synonyms("rich", a, b);
Console.WriteLine(a); // abundant
Console.WriteLine(b); // affluent
}