我无法在c#中访问我继承的值

时间:2013-05-06 00:40:34

标签: c# interface

我有一个如下所示的界面:

public interface ISelectSpace
{
    bool ShowSpaceSelection { get; set; }
    IEnumerable<Space> AvailableSpaces { get; set; }
}

然后我有另一个界面,如下所示:

public interface ISelectSingleSpace : ISelectSpace
{
    string Space { get; set; }
    string SpaceName { get; set; }
}

然而,当我尝试访问变量AvailableSpaces的IEnumerables列表时,我不能像这样使用count函数:

public static class SelectSingleSpace
{
    public static void DoStuff(this ISelectSingleSpace selectSingleSpace)
    {
        Console.Write(selectSingleSpace.AvailableSpaces.Count());
    }
}

我没有正确引用变量吗?

我在另一个类中初始化此方法:

var selectSingleSpace = this as ISelectSingleSpace;
selectSingleSpace.DoStuff();

2 个答案:

答案 0 :(得分:0)

试试这个: (我在派生类中使用this关键字访问某些扩展方法时遇到了麻烦,也许就是这样。在下面的代码中,我试图欺骗它)

public static class SelectSingleSpace
{
    public static void DoStuff(this ISelectSingleSpace selectSingleSpace)
    {
        IEnumerable<Space> AvailableSpaces = selectSingleSpace.AvailableSpaces;
        Console.Write(AvailableSpaces.Count());
    }
}

答案 1 :(得分:0)

您展示的代码部分都很好。您遇到的问题是您没有展示的问题。我已将以下代码粘贴到VS项目中,并已编译并运行:

using System;
using System.Collections.Generic;
using System.Linq;

namespace SO16390592
{
    class Program
    {
        static void Main()
        {
            ISelectSingleSpace test = new Test();
            test.AvailableSpaces = new List<Space>(new Space[1]);
            test.DoStuff();
        }
    }

    public class Space
    {

    }

    public interface ISelectSpace
    {
        bool ShowSpaceSelection { get; set; }
        IEnumerable<Space> AvailableSpaces { get; set; }
    }


    public interface ISelectSingleSpace : ISelectSpace
    {
        string Space { get; set; }
        string SpaceName { get; set; }
    }

    public class Test : ISelectSingleSpace
    {
        public bool ShowSpaceSelection { get; set; }
        public IEnumerable<Space> AvailableSpaces { get; set; }
        public string Space { get; set; }
        public string SpaceName { get; set; }
    }


    public static class SelectSingleSpace
    {
        public static void DoStuff(this ISelectSingleSpace selectSingleSpace)
        {
            Console.Write(selectSingleSpace.AvailableSpaces.Count());
        }
    }
}

这是在控制台上打印的内容:

  
    

1

  

以下是在线演示:http://ideone.com/O2EAak

我建议您向我们展示更多代码,说明您的问题,或者更好的是,为我们创建一个展示您问题的独立可重复案例。