【问题标题】:C# Simple Passing Parameters IssueC# 简单传递参数问题
【发布时间】:2018-04-24 15:45:46
【问题描述】:

我知道我现在听起来像个糟糕的程序员 - 但我是新手,我不知道如何使用这个引用的东西并传递参数,我的意思是我知道怎么做 - 但同时- 这不起作用,我不知道为什么。

static void Main(string[] args) {
  DealCard(ref card);
  Console.WriteLine();
  Console.ReadLine();
}

private static void DealCard(string card) {
  string finalNum = "";
  string finalSuite = "";
  bool diffCard = false;
  do {
    Random cardPicker = new Random();
    int cardSuite = cardPicker.Next(1, 5);
    if (cardSuite == 1) {
      finalSuite = "Hearts";
    } else if (cardSuite == 2) {
      finalSuite = "Spades";
    } else if (cardSuite == 3) {
      finalSuite = "Clubs";
    } else if (cardSuite == 4) {
      finalSuite = "Diamonds";
    }

    int cardNum = cardPicker.Next(1, 14);

    if (cardNum == 1) {
      finalNum = "Ace";
    } else if (cardNum == 2) {
      finalNum = "Two";
    } else if (cardNum == 3) {
      finalNum = "Thre";
    } else if (cardNum == 4) {
      finalNum = "Four";
    } else if (cardNum == 5) {
      finalNum = "Five";
    } else if (cardNum == 6) {
      finalNum = "Six";
    } else if (cardNum == 7) {
      finalNum = "Seven";
    } else if (cardNum == 8) {
      finalNum = "Eight";
    } else if (cardNum == 9) {
      finalNum = "Nine";
    } else if (cardNum == 10) {
      finalNum = "Ten";
    } else if (cardNum == 11) {
      finalNum = "Jack";
    } else if (cardNum == 12) {
      finalNum = "Queen";
    } else if (cardNum == 13) {
      finalNum = "King";
    }

    string newCard = finalNum + " of " + finalSuite;

    if (newCard != card) {
      card = finalNum + " of " + finalSuite;
      diffCard = true;
    } else {

    }
    card = newCard;

  } while (diffCard == false);
}

是的,我知道大量的“如果”令人眼花缭乱。 是的,我知道我可以在不到一半的时间内完成这项工作。 是的,我知道这是一个简单的问题。 是的,我知道我很糟糕,但我想谦虚地请求任何人帮助我停止为此脱发。

【问题讨论】:

  • 您不需要这个:DealCard(ref card);,因为这会起作用:DealCard(card); 但是,如果您有意使用 ref 并且您知道确切原因,那就另当别论了。跨度>
  • 我知道你特别要求不要对大量的 if 失去理智。但是,我只想为您提供简单的替代解决方案:使用字典。键是数字,值是字符串。然后你可以用 cardValuesDict[cardNumber] 替换整个
  • 在调用DealCard之前声明var card = "";
  • 强调@aaron 的评论。你申卡了吗?任何地方??

标签: c# parameter-passing pass-by-reference


【解决方案1】:

你必须像这样声明你的方法:

private static void DealCard(ref string card)

基本上该方法必须接受一个 ref 参数。

以下是支持答案的文档:

Value Type Parameters

Reference Type Parameters

【讨论】:

  • 我已经尝试在方法中使用 'ref' 和 'string card' - 现在我刚刚再次放入,仍然说'名称'card'不存在在当前上下文中'当我试图在 Main 中调用它时。
  • 你能发布完整的代码吗?卡在哪里声明?
  • 看来你的问题不在于 ref.... 它与 card 变量的声明和范围有关
  • 那么我是否应该创建另一个线程然后请求帮助处理变量的声明和范围?而我发布的是完整代码
  • 你需要声明你的变量。卡不存在。您需要使用 ref 的唯一原因是,如果您打算在调用 DealCard 之后使用该变量。您也可以从方法私有静态字符串 DealCard(string card) 中返回字符串并从调用中获取结果
【解决方案2】:

你的代码可以是这样的

public class Program
{

  public static void Main(string[] args) {
  string card = "";
  DealCard(ref card);

}

private static void DealCard(ref string card) 
{
  string finalNum = "";
  string finalSuite = "";
  bool diffCard = false;
  do {
      Random cardPicker = new Random();
      int cardSuite = cardPicker.Next(1, 5);
      string[] suite =  new String[]{"Hearts","Spades", "Clubs", "Diaminds"};


      int cardNum = cardPicker.Next(1, 3);
      string[] numbers = new String[]{"one","two","three", "four"};



    string newCard = numbers[cardNum] + " of " + suite[cardSuite];

    if (newCard != card) {
      card = finalNum + " of " + finalSuite;
      diffCard = true;
    } else {

    }
    card = newCard;
      Console.WriteLine(newCard);


  } while (diffCard == false);
  }
}

【讨论】:

  • 我已经试过了,恐怕 - 它仍然说'card'在主要期间不存在于上下文中。
  • 只是一个问题。为什么要使用ref
  • 这个答案是重复的答案。我在 10 分钟前回答了同样的问题
  • 查看更新的答案...它说卡不存在,因为您没有初始化它
猜你喜欢
  • 2013-03-21
  • 1970-01-01
  • 2011-01-18
  • 1970-01-01
  • 1970-01-01
  • 2023-02-25
  • 1970-01-01
  • 2017-12-05
相关资源
最近更新 更多