out的使用

out 能够使我们的函数返回多个类型的值,不再受返回类型的设置

就是相当于在方法里不仅仅给了一个返回值,被out修饰的参数的值也能带出去;

所以就是说,在方法体内被out修饰的参数,都可以在主函数内获取值来用。大致就是这样

—————————————————————————————————————————————————

在这里面被修饰的参数是msg,而且在方法体内部,对不同情况msg有不同的值;

所以在主函数内,我们就看到,msg被定义了一下,但是,msg的值还是方法体内的值。

   class Program
{
static void Main(string[] args)
{ Console.WriteLine("请输入一个用户名");
string name = Console.ReadLine();
Console.WriteLine("请输入一个密码");
string pwd = Console.ReadLine();
string msg;
bool b = login(name, pwd, out msg);
Console.WriteLine("登陆结果{0}",b);
Console.WriteLine("登陆信息{0}",msg);
Console.ReadKey(); }
//方法的作用就是:先定义好要实现一个什么功能的公式,然后在主函数里代入数据再代用方法,
//第一步先在形参中写上out等要多余返回的参数
//out参数 //分别提示用户输入用户名和密码
//写一个方法来判断用户名和输入的是否正确
//返回给用户一个登陆结果,并且单独返回给用户一个登录信息
//如果用户名错误,除了返回登陆结果之外,还要返回一个“用户名错误”
public static bool login(string name,string pwd,out string msg)
{
//就作用户名和密码能不能匹配正确和返回相应的信息
if (name == "lisi" && pwd == "")
{
msg = "登陆成功";
return true;
}
if (name == "lisi")
{
msg = "密码错误";
return false;
}
if (pwd == "")
{
msg = "用户名错误";
return false;
}
else
{
msg = "未知错误";
return false;
} }
}
  int numm;//这个trypase自带out返回参数的类型,F12可以进去看看他的定义
bool num = int.TryParse(null, out numm);
// bool num = int.TryParse("1212", out numm);
Console.WriteLine(num);
Console.WriteLine(numm);
Console.ReadKey();

—————————————————————————————————————————————————

ref的使用

—————————————————————————————————————————————————

//ref 就是讲一个变量作为参数带入到一个方法中进行改变,deng这个值改变后再将改变后的值
//带回来。注意:无论方法有没有返回值,会将参数的值改变。只要参数被ref改变啦

//这个方法就没有返回值return等词,照样可以将主函数内的改变掉
//反正,我认为ref就是你在方法没有return 的时候参数只要被ref修饰,参数就会改变

其他的没啥用

—————————————————————————————————————————————————

 using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks; namespace ref参数
{
class Program
{
static void Main(string[] args)
{
//double money = 5000;
////double b= jiangjin(money);
//jiangjin(ref money);
//Console.WriteLine(money);
//Console.ReadKey();
int n1 = ;
int n2 = ;
//引入第三者进行转换
//int temp = n1;
//n1 = n2;
//n2 = temp; //不用第三者
//n1 = n1 - n2;//n1:-10 n2: 20
//n2=n1+n2;//n2:10 n1;-10
//n1=n2-n1;//n1:20 n2:10
change(ref n1,ref n2);
Console.WriteLine(n1);
Console.WriteLine(n2); string name = "zkb";
tom(ref name);
Console.ReadKey();
}
//ref 就是讲一个变量作为参数带入到一个方法中进行改变,deng这个值改变后再将改变后的值
//带回来。注意:无论方法有没有返回值,会将参数的值改变。只要参数被ref改变啦
public static void jiangjin(ref double s)
{
//s = s + 500;
// return 在加ref之前,是无返回值的方法,还没有写return 是有错误的,加上ref之后,在主函数中方法后面的参数+ref就可以啦
//ref就是方法不加return 不改变方法的类型
}
//这个方法就没有返回值return等词,照样可以将主函数内的改变掉
//反正,我认为ref就是你在方法没有return 的时候参数只要被ref修饰,参数就会改变
public static void change(ref int s1,ref int s2)
{
int temp = s1;
s1 = s2;
s2 = temp;
} public static void tom(ref string name)
{
Console.WriteLine( name = name + "ojbk");
}
}
}

------------------------------------------------------------------------------------------------------------------------

关于params的知识

//应该就是被params修饰的参数来说,params的内容就可以随意更改但是类型要一致。
//看例子2:test的里面的int数组,被params修饰,自己可以随意添加整型的数是多少。不再固定。
//值得一提的是:但是这个要放在方法的最后面

 using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks; namespace params可变参数
{
class Program
{
static void Main(string[] args)
{
//int[] num = {66,99,55,44, };
//Test("老王",num);
//Test("老王",55,55,55,9999); //从方法哪里的参数可以知道,老王后面应该是数组,但是数组的内容一旦确定就不能修改了
// 但是要想改变数组的内容,要在方法里加上一个params可变参数(但是可变内容的类型要与数组类型相同),但是这个要放在方法的最后面,
//应该就是被params修饰的参数来说,params的内容就可以随意更改但是类型要一致。
//看例子2:test的里面的int数组,被params修饰,自己可以随意添加整型的数是多少。不再固定。
//值得一提的是:但是这个要放在方法的最后面
// 例如要添加一个学号
//Console.ReadKey();
int b = Sum(, , , ,);//这里的Sum方法里面的参数被params修饰,那么,里面的数可以随意增减,但必须得是整形
Console.WriteLine(b);
Console.ReadKey();
}
public static void Test(string name, params int[] score)
{
int sum = ; for (int i = ; i < score.Length; i++)
{
sum += score[i];
}
Console.WriteLine("我叫{0},我这次的总成绩{1}", name, sum); }
public static int Sum(params int[] sum)
{
int a = ;
for (int i = ; i < sum.Length; i++)
{
a+=sum[i];
}
return a;
//Console.WriteLine(); }
}
}

Coding Change The  World  Coding Change The  World   Coding Change The  World  Coding Change The  World Coding Change The  World

总而言之:

out 将方法内的被修饰参数值带出去

ref   将带进入到方法里的值改变后再带出去,无视return的存在

params 主函数内可以对被修饰的参数进行毫无人道的增减

//这里的role参数被out修饰,role 进入到CheckAccount方法里,
//但是可以看到CheckAccount返回的是bool值,但是role的值还是会改变,出了方法后,
//role的值会根据CheekAccount的逻辑改变,然后从方法里带出来,这就是Out的好处。 public IActionResult Get(string userName, string pwd)
{
if (CheckAccount(userName, pwd, out string role))
{
Const.ValidAudience = userName + pwd + DateTime.Now.ToString();
var claims = new[]
{
new Claim(JwtRegisteredClaimNames.Nbf,$"{new DateTimeOffset(DateTime.Now).ToUnixTimeSeconds()}") ,
new Claim (JwtRegisteredClaimNames.Exp,$"{new DateTimeOffset(DateTime.Now.AddMinutes(30)).ToUnixTimeSeconds()}"),
new Claim(ClaimTypes.NameIdentifier, userName),
new Claim("Role", role)
};
var key = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(Const.SecurityKey));
var creds = new SigningCredentials(key, SecurityAlgorithms.HmacSha256);
var token = new JwtSecurityToken(
//颁发者
issuer: Const.Domain,
//接收者
audience: Const.ValidAudience,
//过期时间
expires: DateTime.Now.AddMinutes(),
//签名证书
signingCredentials: creds,
//自定义参数
claims: claims
);
return Ok(new
{
token = new JwtSecurityTokenHandler().WriteToken(token)
});
}
else
{
return BadRequest(new { message = "username or password is incorrect." });
}
}
 private bool CheckAccount(string userName, string pwd, out string role)
{
role = "user"; if (string.IsNullOrEmpty(userName))
return false; if (userName.Equals("admin"))
role = "admin"; return true;
}

out ref params的更多相关文章

  1. C#中in,out,ref,params的作用和区别

    ref和out的区别在C# 中,既可以通过值也可以通过引用传递参数.通过引用传递参数允许函数成员更改参数的值,并保持该更改.若要通过引用传递参数, 可使用ref或out关键字.ref和out这两个关键 ...

  2. C#高级参数out,ref,params

    在C#中通过使用方法来获取返回值时,通常只能得到一个返回值.因此,当一个方法需要返回多个值的时候,就需要用到ref和out,那么这两个方法区别在哪儿呢? out 当需要返回一系列返回值时可用out高级 ...

  3. Out,ref,params修饰符,可选参数,命名参数

    out输出,在调用函数中声明,在被调用函数中赋值: ref在调用函数中赋值,后调用: params修饰符,static double CalculateAverage(params[] values) ...

  4. ref 和 out 的用法和区别以及params用法

    方法参数可以划分为一下四种类型1 值参数:声明时不含任何修饰符2 引用参数:以ref修饰符声明3 输出参数:以out修饰符声明4 参数数组:以params修饰符声明 引用参数和输出参数不创建新的存储位 ...

  5. C# params关键字

    params数组的要点 C#开发语言中 params 是关键字,可以指定在参数数目可变处采用参数的方法参数.在函数的参数数目可变而执行的代码差异很小的时候很有用! class Program { st ...

  6. C#编程经验-function advanced params

    function advanced params:outrefparamsnot useful,to use them is a burden,so i dont use themdefects:ou ...

  7. 参数数组(params)的用法

    使用参数数组的注意事项: 1. 只能在一维数组上使用params关键字. 2. 不能重载一个只基于params关键字的方法.params关键字不构成方法的签名的一部分. 如: //编译时错误:重复访问 ...

  8. C#(转自wiki)

    C#是微软推出的一种基于.NET框架的.面向对象的高级编程语言.C#的发音为"C sharp",模仿音乐上的音名"C♯"(C调升),是C语言的升级的意思.其正确 ...

  9. C# 7.0 新特性2: 本地方法

    本文参考Roslyn项目中的Issue:#259. 1. C# 7.0 新特性1: 基于Tuple的“多”返回值方法 2. C# 7.0 新特性2: 本地方法 3. C# 7.0 新特性3: 模式匹配 ...

随机推荐

  1. IOC-Castle Windsor映射

    Castle最早在2003年诞生于Apache Avalon项目,目的是为了创建一个IOC(控制反转)框架.发展到现在已经有四个组件了,分别是ActiveRecord(ORM组件),Windsor(I ...

  2. Excel—— [导入到数据库] or 将数据 [导入到Excel]

    将Excel导入到数据库实现如下: 前台代码: @model IEnumerable<Model.Student> @{ Layout = null; } <!DOCTYPE htm ...

  3. Android和IOS等效MD5加密

    最近在Android和IOS上都需要对用户的某些输入进行简单的加密,于是采用MD5加密方式. 首先将目的字符串加密一次,获得32位字符串 然后将32位字符串拆为2段,分别加密1次 最后将加密后的2段拼 ...

  4. 用IIS怎样在局域网内建网站

    IIS服务器组建一览 IIS(Internet Information Server,互联网信息服务)是一种Web(网页)服务组件,其中包括Web服务器.FTP服务器.NNTP服务器和SMTP服务器, ...

  5. ZBrush破解版真的好用么?

    安装ZBrush®的时候是不是经常出现各种奇葩问题,使用ZBrush时候是不是经常出现停止工作状况,究其原因,原来都是破解搞的鬼.ZBrush破解版你还敢用么? 随着国人对版权的重视,越来越多的制作商 ...

  6. 注解实战Beforeclass和Afterclass

    package com.course.testng;import org.testng.annotations.*; public class BasicAnnotation { //最基本的注解,用 ...

  7. Flask入门系列(转载)

    一.入门系列: Flask入门系列(一)–Hello World 项目开发中,经常要写一些小系统来辅助,比如监控系统,配置系统等等.用传统的Java写,太笨重了,连PHP都嫌麻烦.一直在寻找一个轻量级 ...

  8. 升级ruby到2.0

    本文部分内容转载,如侵犯个人利益请联系博客管理员及时删除,或留言之评论区 一.安装库 Yum install –y gcc* openssl* wget 二.安装ruby wget https://c ...

  9. pytorch 1 torch_numpy, 对比

    import torch import numpy as np details about math operation in torch can be found in: http://pytorc ...

  10. 【转】python 关键字

    转自:http://www.cnblogs.com/hongten/p/hongten_python_keywords.html python3.3.2中的关键字如下: The following i ...