C# “C”;作为「;运算符和高级转换在循环/函数和out/ref参数修饰符和typeof()中的使用

C# “C”;作为「;运算符和高级转换在循环/函数和out/ref参数修饰符和typeof()中的使用,c#,out,ref,typeof,C#,Out,Ref,Typeof,我需要澄清一下: is/as操作员 输出/参考参数修改器 类型 只回答你知道的或你想回答的问题,如果你不想回答,就不要回答整个问题 是的,我要求澄清这些。纠正我或补充我已经说过的话 嗯,我在谷歌上搜索了一下,登陆了各种网站,MSDN等等。我仍然需要有人编写一些代码来帮助我澄清整个概念,并最终让我充分利用它,希望这对其他人也有帮助 基本上这就是我所理解的: A) 是 伪码 如果对象是此类型,则返回true,否则返回false 简单。还是我做错了什么 某些类型是否存在任何限制或问题 这段代码运行得很

我需要澄清一下:

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
    的问题。如果你不明白为什么它会有用,那么最好忽略它的使用(实际上,任何东西都是如此)
  • 1) 关于is操作员,您是正确的
    2) as运算符的用途是抑制错误大小写的异常,以便在转换错误时抛出null。
    3) 参考请参考下面的链接,这里给出了详细的解释
    4) out参数通常用于需要从函数返回多个值的情况。一个值使用return语句直接返回,另一个值使用out参数返回。 例如,明确理解是指。您可以在那里找到jon skeet的优秀文章。
    5) 可能会出现这样的情况,即您希望检查对象的类型以执行ceratain操作,但大多数情况下,根据RTTI设计原则,不应使用这种方法。a)问题是您答对了

    b) 也许这会带来一些光-

    对于其余部分和以上部分,本codeproject教程(分两部分)可能会有所帮助:


    typeofGetTypeis都是不同的,可以输出不同的结果。因为有我见过的最简单的解释


    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
    }