2017-02-02 4 views
-2
public class Program 
{ 
    public static void Main(string[] args) 
    { 
     var c = check.myValue("Example 1"); //This is the pattern I've to use, don't want to create an object (Is it possible to use it with static class) 
     Console.WriteLine(c.result1); 
     Console.WriteLine(c.result2); 
    } 
} 

public static class check 
{ 
    public static void myValue(string qr) 
    { 
     public string result1 = "My Name" + qr; 
     public string result1 = "You're" + qr; 
    } 
} 

See here Online Example (код не работает)Ошибка на статическом классе

Каждая вещь на основной функции Я использовать точно такую ​​же картину, потому что я буду использовать его в большом количестве различных классов и я не Не хотите создавать объект каждый раз, используя нестатический класс.

Пожалуйста, поправьте меня, если я ошибаюсь

+0

Метод myValue возвращает 'void' ... Как можно преобразовать во что-то? – Fabjan

+3

«Код не работает» - это * никогда * достаточно информации. * Всегда, всегда * включайте сообщение об ошибке и то, что вы сделали, чтобы узнать, что означает эта ошибка. –

ответ

4

Ваш код совершенно неправильно

  1. myValue метод возвращает void. Вы не можете назначить возвращаемое значение void переменной.
  2. У вас не может быть public модификаторов для локальных переменных.
  3. Вы не можете иметь локальные переменные с таким же именем в той же области

Если вы хотите, чтобы вернуть два значения из метода, то вы должны вернуть объект с двумя полями - пользовательский класс или кортежей. Вы можете также использовать из параметров, но я не думаю, что это ваш случай

public static class Check 
{ 
    public static Tuple<string, string> MyValue(string qr) 
    { 
     return Tuple.Create($"My Name {qr}", $"You're {qr}"); 
    } 
} 

С # 7 это немного лучше. Вы можете написать этот метод в одной строке и указать имена для кортежей свойств

(string MyName, string YourName) MyValue(string qr) => ($"My Name {qr}", $"You're {qr}"); 

Usage

var result = Check.MyValue("Example 1"); 
Console.WriteLine(result.Item1); // result.MyName 
Console.WriteLine(result.Item2); // result.YourName 

Вы можете практиковать с созданием пользовательского класса с хорошо именованными свойствами вместо того, чтобы использовать кортежи.

+1

Также вы не можете объявить две переменные с тем же именем в той же области ('result1'). – yaakov

+0

Могу ли я также использовать словарь в нем? –

+0

@FaizanRupani да, вы можете, но словарь не дает вам подсказки о том, какие значения у него есть. Вы можете использовать простой 'List ', если хотите только вернуть пару неназванных значений –

5

Существует много неправильного синтаксиса этого кода, который @Sergey адресует в его ответе.

Кажется, что вы хотите вернуть экземпляр класса из статического метода, и этот класс должен содержать два свойства.

Вы можете сделать это путем создания фактического, нестатический класс, содержащий свойства:

public class Check 
{ 
    public string Result1 { get; set; } 
    public string Result2 { get; set; } 
} 

Затем возвращает новый экземпляр из статического метода в нем:

public static Check MyValue(string qr) 
{ 
    var result = new Check(); 
    result.Result1 = "My Name" + qr; 
    result.Result2 = "You're" + qr; 
    return result; 
} 

Однако, вы говорите в комментариях вашего кода, что вы не хотите использовать объект.

В этом случае, похоже, вы хотите использовать статические свойства. Это обычно не рекомендуется, но это будет выглядеть следующим образом:

public static class Check 
{ 
    public static string Result1 { get; set; } 
    public static string Result2 { get; set; } 

    public static void MyValue(string qr) 
    { 
     Result1 = "My Name" + qr; 
     Result2 = "You're" + qr; 
    } 
} 

Тогда вы можете прочитать Check.Result1 после вызова метода MyValue().

+1

Иногда жизнь несправедлива. OP здесь действительно нуждается в хорошей книге C#, а не в ответе, который едва царапает поверхность синтаксиса. Вопрос на самом деле неясен и слишком широк. Тем не менее, это дает мне пять upvotes ... – CodeCaster

+0

С другой стороны, ваш ответ может помочь OP лучше понять это. – Fabjan

+0

вот так http://rextester.com/RHEUP89866? –

Смежные вопросы