我正在尝试从我的DisplayFortune方法访问数组财富,但它说它在当前上下文中不存在。任何帮助,将不胜感激。我是C#的新手。
static void Main()
{
// Write your main here.
string[] fortune = { "String 1", "String 2", "String 3", "String 4",
"String 5", "String 6" };
Random rand = new Random();
int index = rand.Next(fortune.Length);
WriteLine(fortune[index]);
ReadLine();
}
public static void DisplayFortune(string first, string second)
{
WriteLine(fortune[index]);
}
答案 0 :(得分:3)
明确地将其作为方法参数传递,例如
public static void DisplayFortune(string first, string second, string[] fortune)
{
WriteLine(fortune[index]);
}
答案 1 :(得分:1)
string[] fortune
,Random rand
,int index
这样的 Local 变量在作用域之下不可见它们以(即Main
方法)声明。
在实现DisplayFortune
方法时,让我们看一下我们想要哪个参数:
public static void DisplayFortune(/* what should we put here? */)
{
// we want:
// fortune
// index
WriteLine(fortune[index]);
}
因此我们可以放上
public static void DisplayFortune(string[] fortune, int index)
{
WriteLine(fortune[index]);
}
最后,由于它是一个 public 方法(每个人都可以调用它),所以让我们 validate 输入(如果我将其执行为DisplayFortune(null, -1234)
会怎样?):
public static void DisplayFortune(string[] fortune, int index)
{
if (null == fortune)
throw new ArgumentNullException(nameof(fortune));
else if (index < fortune.GetLowerBound(0) || index > fortune.GetUpperBound(0))
throw new ArgumentOutOfRangeException(nameof(index));
WriteLine(fortune[index]);
}
要调用该方法,我们应提供其参数:
static void Main()
{
string[] fortune = {
"String 1", "String 2", "String 3", "String 4", "String 5", "String 6"
};
Random rand = new Random();
int index = rand.Next(fortune.Length);
...
DisplayFortune(fortune, index);
}
答案 2 :(得分:0)
在Main之外声明您的财富变量。在类声明的下面。
答案 3 :(得分:0)
你不能。
否则,如果您要将此变量设为类的成员,例如:
// declaration outside of Main's scope
static string[] fortune;
static void Main()
{
// Write your main here.
fortune = { "String 1", "String 2", "String 3", "String 4",
"String 5", "String 6" };
Random rand = new Random();
int index = rand.Next(fortune.Length);
WriteLine(fortune[index]);
ReadLine();
}
public static void DisplayFortune(string first, string second)
{
WriteLine(fortune[index]);
}
或者,如果直接将此变量传递给方法,例如:
public static void DisplayFortune(string first, string second, string[] fortune)
{
WriteLine(fortune[index]);
}
答案 4 :(得分:0)
您不能在另一个方法内部访问变量,除非将其带出方法范围之外。
因此,将变量从Main中移出,然后即可访问它。
例如。伪代码
int yourVaribale = 0;
static Main { yourVariable = 5; OtherMethod(); }...
static OtherMethod{ yourVariable = 10; }....
答案 5 :(得分:0)
您的功能没有任何意义。 - 选项1 : 在任何事物之外将财富声明为const -选项2: 将数组添加为displayFortune()参数
答案 6 :(得分:0)
有几种方法可以执行此操作。 您可以像下面这样声明变量 Outside Main函数:
static string[] fortune = { "String 1", "String 2", "String 3", "String 4",
"String 5", "String 6" };
另一个选择是将变量传递给方法:
public static void DisplayFortune(string first, string second, string[] fortune)
{
WriteLine(fortune[index]);
}
答案 7 :(得分:0)
因此,在您发布的代码中有一些奇怪的事情。之所以无法访问该变量,是因为该变量超出范围。。在出现大括号public void putProfilePic(String url, File profileImage,
final Action1<UserIdentity> userIdentityAction) {
RequestBody fileBody = RequestBody.create(MediaType.parse("image/png"), profileImage);
appCMSUserIdentityRest.putUserProfileImage(url, fileBody).enqueue(new Callback<UserIdentity>() {
@Override
public void onResponse(@NonNull Call<UserIdentity> call,
@NonNull Response<UserIdentity> response) {
if (response.body() != null) {
Observable.just(response.body())
.onErrorResumeNext(throwable -> Observable.empty())
.subscribe(userIdentityAction);
}
}
@Override
public void onFailure(@NonNull Call<UserIdentity> call, @NonNull Throwable t) {
Observable.just((UserIdentity) null)
.onErrorResumeNext(throwable -> Observable.empty())
.subscribe(userIdentityAction);
}
});
}
{
的任何位置,您都在创建有范围的 block < / strong>。在该块中声明的变量只能在同一块中引用。因此,除非有其他功能,否则您无法访问该变量:
该代码的第二个奇怪之处是,}
中有两个未使用的参数。您应该更改这些参数以接受数组。
DisplayFortune
然后,像Main中的public static void DisplayFortune(string[] fortunes, int index)
{
WriteLine(fortunes[index]);
}
一样调用它。
我认为您正在学习,所以只想指出另一种改进代码的方法:
DisplayFortune(fortunes, index);
作为字符串,因此您的return
方法可以使用它。答案 8 :(得分:0)
通常,您的阵列运气在另一个范围内,要解决您的问题,有两种方法。
您需要在Main方法之外声明您的数组命运,在这种情况下,因为Main和DisplayFortune方法都具有相同的 level-class范围,因此您的数组命运将对方法可用
// Level-Class Scope
static string[] fortune ;
static void Main()
{
// Write your main here.
fortune = new string[6];
Random rand = new Random();
int index = rand.Next(fortune.Length);
Console.WriteLine(fortune[index]);
Console.ReadLine();
}
public static void DisplayFortune(int index)
{
Console.WriteLine(fortune[index]);
}
解决问题的第二种方法是在 DisplayFortune
中将其作为参数传递简单方法:
public static void DisplayFortune(string[] array, int index)
{
Console.WriteLine(array[index]);
}
扩展方法:
public static void DisplayFortune(this string[] array, int index)
{
Console.WriteLine(array[index]);
}
最诚挚的问候。