c#函数中的返回关键字
本文关键字:返回 关键字 函数 | 更新日期: 2023-09-27 18:03:54
我有一个关于c#函数输出或返回的简单问题。我试图理解,然后在互联网上看,但没有答案!你能给我解释一下有多个return
语句的函数是怎么做的吗?例如:
using UnityEngine;
using System.Collections;
using System;
using lj;
namespace ljack
{
public class joystick : MonoBehaviour {
public static float a;
public static float b;
void Start(){
int[] idList = GetAllLabJacks();
if (idList.Length == 0)
Debug.Log("No LabJacks found!");
else
{
// List the IDs of LabJacks we found
foreach (int id in idList)
{
Debug.Log("id=" + id);
}
}
}
void Update(){
// Read in the analog input from channel 0
// and output the result
int ljID = 2;
int overVoltage = 0;
float voltage1 = 0.0f;
int result = LabJack.EAnalogIn(ref ljID, 0, 0, 0, ref overVoltage, ref voltage1);
//Debug.Log("voltage1="+ voltage1);
float voltage2=0.0f;
result = LabJack.EAnalogIn(ref ljID, 0, 1, 0, ref overVoltage, ref voltage2);
//Debug.Log("voltage2="+ voltage2);
a=voltage1;
b=voltage2;
}
// This returns an array of all the local IDs which we use.
//
public static int[] GetAllLabJacks()
{
// Make sure we allocate space for what is passed
int[] productIDList = new int[127];
int[] serialNumList = new int[127];
int[] localIDList = new int[127];
int[] powerList = new int[127];
int[,] calMatrix = new int[127, 20];
int numFound = 0;
int reserved1 = 0, reserved2 = 0;
// Call the ListAll function. We must use the keyword ref for parameters
// that aren't arrays that return data
int result = LabJack.ListAll(productIDList, serialNumList, localIDList,
powerList, calMatrix, ref numFound, ref reserved1, ref reserved2);
int[] ljs = new int[numFound];
int i = 0;
// count how many we found and set
// the array which will be returned
// to contain valid IDs
foreach (int id in localIDList)
{
if (id != 9999)
{
ljs[i] = id;
++i;
}
}
// return that array
return ljs;
}
// This is our function that read's analog input
public static float Getjoyst(){
return a;
return b;
}
}
}
返回a还是b,还是一个接着一个?
look for this code also
using UnityEngine;
using System.Collections;
using System;
using System.Text;
using System.IO;
public class menu : MonoBehaviour {
// name .. of the player
public string nom;
public string pathologie;
public string comment;
// v is used to display the value of( niveau de vitesses)
public static int v;
//pour pouvoir copier les donnees dans le script mouvement, tracction et central
public static string playnom;
public static string playpathologie;
public static string playcomment;
public static string envir;
public static string main;
public static bool Activer;
public static bool Desactiver;
// le type du fauteuil
public static bool Propultion;
public static bool Central;
public static bool Traction;
// obstacles
public static bool Serie1;
public static bool Serie2;
public static bool Serie1et2;
//coté de commande
public static bool aucun;
public static bool gauche;
//env
public static bool droite;
public bool exterieur;
public bool cerah;
public bool nan;
public bool crnf;
// mouvement des obstacles
public bool activer;
public bool desactiver;
// used to display the text
public GUIText fauteuil; // used to display the text fauteuil
public GUIText vitesse; // used to display the text vitesse
public GUIText obstacles; // used to display the text obstacles
public GUIText mouv; // used to display the text obstacles en mouvement
public GUIText env; // used to display the text Envirennement
public GUIText info;
public GUIText cotecommande;
// pour les indications et les affichage
public GUIText indication;
public GUIText indication1;
public GUIText indication2;
public GUIText niveau; //used to display the text niveau
public GUIText important;
//importation des variables
public bool etat1; // pour importer des variables bool de mouvement
public bool pro;
public bool etat2; // pour importer des variables bool de central
public bool cen;
public bool etat3;// pour importer des variables bool de traction
public bool tra;
public string information1; // pour importer des variables de type string de mouvement
public string information2; // pour improter des variables de type string de central
public string information3; // pour importer des variables de type string de traction
void OnGUI(){
// premiers bouton du menu principal
if(GUI.Button(new Rect(10,50,200,25),"Information utilisateur")){
main="Information utilisateur";
}
if (GUI.Button(new Rect(10,100,200,25),"Fauteuil")) {
main="Fauteuil";
}
if(GUI.Button(new Rect(10,150,200,25),"Environnement")){
main="Envirennement";
}
if(GUI.Button(new Rect(10,200,200,25),"Raccourcis clavier")){
main="Raccourcis clavier";
}
if(GUI.Button(new Rect(10,250,200,25),"Commencer la simulation")){
main="Commancer la sim";
}
if(GUI.Button(new Rect(10,300,200,25),"Quitter")){
main="Quitter";
Application.Quit();
}
//---------------------------------------------------------------------------------
if (main=="Information utilisateur"){
// si le buttoninfo utili est appuyé
GUI.Label(new Rect(300,100,100,30),"Nom: "); //On ecrit sur un label le mot nom
nom=GUI.TextField(new Rect(350,100,200,30), nom); //reservation d'une case rectangulaire pour l'ecriture d'une chaine de caractères
GUI.Label(new Rect(300,150,100,30),"pathologie: ");
pathologie=GUI.TextField(new Rect(370,150,200,30), pathologie);
GUI.Label(new Rect(300,200,100,30),"Commentaires: ");
comment=GUI.TextField(new Rect(300,250,300,100), comment);
info.text="Informations utilisateur";
indication2.text="Renseignez les informations puis appuyez sur OK";
if(GUI.Button(new Rect(300,400,100,25),"ok")){
if (nom==""||pathologie==""){
important.text="nom est pathologie obligatoires ";
}
else
{
playnom=nom;
playpathologie=pathologie;
playcomment=comment;
main="";
important.text="";
}
}
}
else{
info.text="";
indication2.text="";
}
//-----------------------------------------------------------------------------------------
if(main=="Fauteuil"){
// si le boutton fauteuil allors
//affichage des textes
fauteuil.text=main;
vitesse.text="vitesse Du Fauteuil";
indication.text="Choisissez la configuration du fauteil puis appuyez sur OK";
cotecommande.text="cote de commande";
//criation des bouttons
if(GUI.Toggle(new Rect(300,100,150,25),Propultion,"Propultion")){
Propultion=true;
Central=false;
Traction=false;
}
if(GUI.Toggle(new Rect(450,100,150,25),Central,"Central")){
Propultion=false;
Central=true;
Traction=false;
}
if(GUI.Toggle(new Rect(600,100,150,25),Traction,"Traction")){
Propultion=false;
Central=false;
Traction=true;
}
if(GUI.Toggle(new Rect(300,300,150,25),gauche,"gauche ")){
gauche=true;
droite=false;
}
if(GUI.Toggle(new Rect(450,300,150,25),droite,"droite")){
gauche=false;
droite=true;
}
if(GUI.Button(new Rect(300,400,100,25),"ok")){
main="";
}
//si le buton + alors on augmente le niveau
if(GUI.Button(new Rect(300,200,25,25),"-")){
v=v-1;
}
// si le bouton - alors on deminue le niveau
if(GUI.Button(new Rect(450,200,25,25),"+")) {
v=v+1;
}
niveau.text="niveau "+v;
}
else{
// effacer les texte si le bouton fauteil n'est pa appuyé
fauteuil.text="";
vitesse.text="";
niveau.text="";
indication.text="";
cotecommande.text="";
}
//----------------------------------------------------------------------------------------------------------------
if (main=="Envirennement"){
// si le button envirennement alors
aucun=true;
desactiver=true;
obstacles.text="Obstacles";
indication1.text="Choisissez les obstacles et l'envirennement puis appuyez sur OK";
env.text="Envirennement";
//les obstacles
if(GUI.Toggle(new Rect(300,100,150,25),Serie1,"Serie 1(cones)")){
Serie1=true;
Serie2=false;
Serie1et2=false;
aucun=false;
mouv.text="";
desactiver=true;
activer=false;
}
if(GUI.Toggle(new Rect(450,100,150,25),Serie2,"Serie 2")){
Serie1=false;
Serie2=true;
Serie1et2=false;
aucun=false;
mouv.text="Obstacles en mouvement";
//mouvement des obstacles
if(GUI.Toggle(new Rect(300,200,100,25),activer,"Activer")){
activer=true;
desactiver=false;
}
if(GUI.Toggle(new Rect(450,200,100,25),desactiver,"Desactiver")){
desactiver=true;
activer=false;
}
}
if(GUI.Toggle(new Rect(600,100,150,25),Serie1et2,"Serie 1 et 2")){
Serie1=false;
Serie2=false;
Serie1et2=true;
aucun=false;
mouv.text="Obstacles en mouvement";
//mouvement des obstacles
if(GUI.Toggle(new Rect(300,200,100,25),activer,"Activer")){
activer=true;
desactiver=false;
}
if(GUI.Toggle(new Rect(450,200,100,25),desactiver,"Desactiver")){
desactiver=true;
activer=false;
}
}
if(GUI.Toggle(new Rect(750,100,150,25),aucun,"Aucun obstacle")){
Serie1=false;
Serie2=false;
Serie1et2=false;
aucun=true;
desactiver=true;
activer=false;
mouv.text="";
}
//envirennement
if(GUI.Toggle(new Rect(300,300,100,25),exterieur,"Exterieur")){
exterieur=true;
cerah=false;
nan=false;
crnf=false;
}
if(GUI.Toggle(new Rect(450,300,100,25),cerah,"CERAH")){
exterieur=false;
nan=false;
cerah=true;
crnf=false;
}
if(GUI.Toggle(new Rect(600,300,100,25),nan,"NANCY")){
exterieur=false;
cerah=false;
nan=true;
crnf=false;
}
if(GUI.Toggle(new Rect(750,300,100,25),crnf, "CRNF")){
exterieur=false;
cerah=false;
nan=false;
crnf=true;
}
if(GUI.Button(new Rect(300,400,100,25),"ok")){
mouv.text="";
main="";
Activer=activer;
Desactiver=desactiver;
}
}
else{
obstacles.text="";
indication1.text="";
env.text="";
}
//------------------------------------------------------------------------------------------------------------
if(main=="Commancer la sim"){
if (nom==""||pathologie==""){
important.text="nom et pathologie obligatoires ";
}
else
{
if (cerah){
Application.LoadLevel("scene1");
envir="CERAH";
}
if (exterieur){
Application.LoadLevel("scene2");
envir="exterieur";
}
if (nan){
Application.LoadLevel("scene5");
envir="NANCY";
}
if(crnf){
Application.LoadLevel("scene4");
envir="CRNF";
}
}
}
//-------------------------------------------------------------------------------------------------------------------
if(main=="Raccourcis clavier"){
GUI.Label(new Rect(300,50,600,25),"Z E R T Y U: Changer la position de la camera ");
GUI.Label(new Rect(300,75,500,25),"C V N B : type d'obstacles . ");
GUI.Label(new Rect(350,100,500,25),"C : Serie 1 et 2 .");
GUI.Label(new Rect(350,125,500,25),"V: Serie 2 (humain).");
GUI.Label(new Rect(350,150,500,25),"N: Serie 1 (cones).");
GUI.Label(new Rect(350,175,500,25),"B: Aucun obstacle.");
GUI.Label(new Rect(300,200,500,30),"A D: Activer ou desactiver le mouvement des obstacles serie2. ");
GUI.Label(new Rect(350,225,500,25),"A: Activer. ");
GUI.Label(new Rect(350,250,500,25),"D: Desactiver. ");
GUI.Label(new Rect(300,275,500,25),"1 2 3 4 5: Les niveaux de vitesses. ");
GUI.Label(new Rect(350,300,500,25),"1: 02 KM/H. ");
GUI.Label(new Rect(350,325,500,25),"2: 04 KM/H. ");
GUI.Label(new Rect(350,350,500,25),"3: 06 KM/H. ");
GUI.Label(new Rect(350,375,500,25),"4: 08 KM/H. ");
GUI.Label(new Rect(350,400,500,25),"5: 10 KM/H.");
GUI.Label(new Rect(300,425,500,25),"S Q:Enregistrement des donnees dans un fichier texte. ");
GUI.Label(new Rect(350,450,500,25),"S: Commencer ou Reprendre l'enregistrement ");
GUI.Label(new Rect(350,475,500,25),"Q: Arret de l'enregistrement. ");
GUI.Label(new Rect(300,500,500,25),"F O : Ouverture et fermeture des portes de l'ascenseur de l'envenimement C.R.N.F. ");
GUI.Label(new Rect(350,525,500,25),"O: Ouverture des portes de l'ascenseur. ");
GUI.Label(new Rect(350,550,500,25),"F: Fermetures des portes de l'ascenseur. ");
GUI.Label(new Rect(300,575,1450,25),"P: Pause et Retour au menu principal");
}
}
void Start()
{
// importation des variables
etat1=mouvement.typefaut();
pro=mouvement.PROPULTION;
etat2=central.typefaut();
cen=central.CENTRAL;
etat3=traction.typefaut();
tra=traction.TRACTION;
if(pro){
information1=mouvement.utilis();
nom=mouvement.NOM;
pathologie=mouvement.PATHOLOGIE;
comment=mouvement.COMMENT;
}
if(cen){
information2=central.utilis();
nom=central.NOM;
pathologie=central.PATHOLOGIE;
comment=central.COMMENT;
}
if(tra){
information3=traction.utilis();
nom=traction.NOM;
pathologie=traction.PATHOLOGIE;
comment=traction.COMMENT;
}
playnom=nom;
playpathologie=pathologie;
playcomment=comment;
// choix par defaut
Propultion=true;
Central=false;
Traction=false;
gauche=false;
droite=true;
v=3;
Serie1=false;
Serie2=false;
Serie1et2=false;
aucun=true;
desactiver=false;
activer=true;
}
void Update ()
{
//limiter les niveau entre 1 et 10
if (v>=5){
v=5;
}
if(v<=1){
v=1;
}
// for saving the data in txt file
playnom=nom;
playpathologie=pathologie;
playcomment=comment;
Time.timeScale=0; // temps en arret
}
public static string Getnom(){
//pour la recuperation des données de type string dans le script mouvement
return playnom;
return playpathologie;
return playcomment;
return envir;
return main;
}
public static bool Getetat(){
//pour la recuperation des données de type bool dans le script mouvement
return Activer;
return Desactiver;
return Serie1;
return Serie2;
return Serie1et2;
return aucun;
return Propultion;
return Central;
return Traction;
return gauche;
return droite;
}
public static int Getvit(){
return v;
}
}
指令序列中第一个执行的return
语句返回。这将返回a
。通常情况下,只有当有某种条件决定返回哪一个时,才会看到多个return语句。
多个return
语句只有在你的方法中有条件时才有意义。
的例子:
public static float GetValue() {
if (a) {
return x;
}
else {
return y;
}
}
return b;
将永远不会在此场景中执行。函数执行将在return a;
结束,a
的值将返回给调用代码。然后程序将从调用GetValue()函数的位置继续。
其他人指责你没有做足够的研究。我想你只是没有足够的技巧来完成它。你可以通过各种方式看到程序正在做什么,例如,通过调试它(设置一个断点,然后逐步查看发生了什么),或者用一些东西临时检测代码,让你知道发生了什么。例如:
Console.WriteLine('before return a');
return a;
Console.WriteLine('after return a, before return b');
return b;
在调用函数时也做同样的事情。熟悉这些话题。祝你编程愉快:-)
在某些情况下,多个return
语句可以在c#中有效。Thakrage的条件返回例子就是一个。
另一种情况是,您实际希望在列表中返回多个数字。这可以通过在方法中构造列表,添加项,然后返回它来实现,或者通过涉及可枚举集合的更高级的技术来实现,例如:
public static IEnumerable<float> GetValues()
{
// …
yield return a;
yield return b;
}
通常在循环中使用,或者显式地像这样:
foreach (float value in GetValues())
// …
或隐式地将其传递给另一个操作可枚举集合的方法:
float sumOfSquares = GetValues().Sum(f => f * f);
从你的问题中,我强烈怀疑这是你想知道的,但这是你将来可能会遇到的另一个例子。