C # / CS1061 - Ошибка со ссылкой на свойство класса, возвращенного из стека - PullRequest
0 голосов
/ 05 августа 2020

В настоящее время у меня есть этот код. Он создает и помещает класс в стек, затем «выталкивает» объект из стека и регистрирует его свойство.

public class Class {

    public static Stack<object> ExampleStack = new Stack<object>();

    public class ExampleClass 
    { 
        public string A {get; set;}
        public int b {get; set;}
        public int C {get; set;}
        
        ExampleClass(string a, int b, int c) 
        {
            A=a;
            B=b;
            C=c;
        }
    }
    void main() 
    {
         ExampleStack.Push(new ExampleClass("E", 1, 2));
    }
    
    public static void TestStack() 
    {
        Temp = ExampleStack.Pop();
        Console.Log(Temp.A);
    }
}

Я не могу понять почему Temp.A Выдает ошибку CS1061 перед компиляцией в Visual Studio.

Любая помощь приветствуется

1 Ответ

3 голосов
/ 05 августа 2020

Вам нужно изменить эту строку:

public static Stack<object> ExampleStack = new Stack<object>();

на это:

public static Stack<ExampleClass> ExampleStack = new Stack<ExampleClass>();

CS1061 говорит: 'type' не содержит определения для 'member' и не удалось найти метод расширения name, принимающий первый аргумент типа type (вам не хватает директивы using или ссылки на сборку?).

Вы пытались вызвать Temp.A, но Temp имеет тип object и не реализует A

Возможно, вам также придется переместить объект ExampleClass в его собственный CS-файл.

ExampleClass .cs: ​​

public class ExampleClass 
{ 
    public string A {get; set;}
    public int B {get; set;}
    public int C {get; set;}
    
    public ExampleClass(string a, int b, int c) 
    {
        A=a;
        B=b;
        C=c;
    }
}

Program.cs:

using System;
using System.Collections.Generic;

public static class Program
{
    private static readonly Stack<ExampleClass> ExampleStack = new Stack<ExampleClass>();
    
    static int Main()
    {
        ExampleStack.Push(new ExampleClass("E", 1, 2));
        TestStack();
        return 0;
    } 
    
    public static void TestStack() 
    {
        var Temp = ExampleStack.Pop();
        Console.WriteLine(Temp.A);
    }
}
...