相关疑难解决方法(0)

.NET中的非泛型集合是否已过时?

换句话说:

是否有充分的理由选择松散类型的集合而不是类型安全的集合(HashTable vs. Dictionary)?它们是否仅用于兼容性?

据我所知,通用集合不仅类型安全,而且性能更好.


这是一篇关于该主题的综合文章:使用C#2.0对数据结构进行广泛的检查.

.net generics collections

25
推荐指数
4
解决办法
6015
查看次数

我应该在.NET中使用哪个集合接口进行COM-interop?

这是我之前的问题的后续内容,但您不需要阅读它来理解那个问题.

我正在设计.NET中的接口,它将从COM应用程序(主要是VB6,但Visual C++ 6也是一种可能性)中使用,我想使用Collection类型作为接口中方法的参数和返回类型.

问题:

  1. 当VB6内置集合类型(数组,集合,字典)通过互操作时会发生什么?我目前的猜测是:

    • 数组 - > System.Array
    • 收藏 - > Microsoft.VisualBasic.Collection
    • 词典 - > System.Collections.Hashtable

    那是对的吗?

  2. 我应该使用哪些接口作为返回类型?IEnumerable,ICollection,IList,IDictionary?我是否能够在VB6中执行For Each迭代这些接口?我应该使用接口的通用或非通用变体吗?

.net vb6 com-interop

8
推荐指数
1
解决办法
3822
查看次数

为什么ArrayList与COM Interop一起使用,但IList <T>不兼容?

我注意到,如果我创建一个公开ArrayList的.NET组件,那么该ArrayList将通过COM Interop并以脚本语言(如VBScript)提供.

泛型,如IList<T>似乎没有工作.

为什么这样,是否有任何方法可以使通用类型成功地通过COM Interop流向脚本引擎?

generics scripting com-interop

7
推荐指数
1
解决办法
2653
查看次数

如何在VBA中使用.NET类?语法帮助!

好吧,我想在VBA中使用几个.NET类.所以我必须通过COM注册它们.我想我已经找到了COM注册(最后),但现在我需要有关如何创建对象的语法的帮助.这是一些伪代码,显示了我想要做的事情.

编辑:更改附加对象以返回ArrayList而不是List

.NET类看起来像这样......

public class ResourceManagment
{
    public ResourceManagment()
    {
        // Default Constructor
    }

    public static List<RandomObject> AttachedObjects()
    {
        ArrayList list = new ArrayList();
        return list;
    }
}

public class RandomObject
{
    // 
    public RandomObject(int someParam)
    {

    }

}
Run Code Online (Sandbox Code Playgroud)

好的,这就是我想在VBA中做的事情(用C#演示),但我不知道怎么做......

public class VBAClass
{
    public void main()
    {
        ArrayList myList = ResourceManagment.AttachedObjects();
        foreach(RandomObject x in myList)
        {
            // Do something with RandomObject x like list them in a Combobox
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

需要注意的一点是RandomObject没有公共默认构造函数.所以我无法创建它的实例Dim x As New RandomObject.MSDN说你不能通过COM实例化一个没有默认构造函数的对象,但是如果它被另一个方法返回,你仍然可以使用它.Types …

.net com vba instantiation

6
推荐指数
1
解决办法
1232
查看次数

如何使用 C# 类型库 - COM-Interop 分配对象属性/方法数组?

``

我有一个 C# 类库项目 (.Net Framework 4.5),我在 VB6 中将其用作类型库 (.tlb)。

对于将非集合对象作为属性或返回的属性,一切都可以正常工作。

据我所知,不可能公开用户类型对象的集合(数组/列表)(例如Product []在 C# 项目中)并将其导出到 tlb 文件,但Object []我听说这是可以的。所以,我改变了:

Public List<Product> ListOfProducts( get; set; )

Run Code Online (Sandbox Code Playgroud)

Object [] _productList;
public Object [] ListOfProducts
{
    get
    {
        return _productList;
    }
    set
    {
        _productList = value;
    }
}
Run Code Online (Sandbox Code Playgroud)

我也尝试过:

public void SetListOfProducts(Object [] products)
{
    _productList= products;
}
Run Code Online (Sandbox Code Playgroud)

完成后,ListOfProducts或者SetListOfProducts现在在 Visual Basic 6 项目中可见,但在 VB6 中,当我运行时:

Private Sub Command1_Click()
    Dim Sell as new SellProducts
    Dim …
Run Code Online (Sandbox Code Playgroud)

c# vb6 com-interop

5
推荐指数
1
解决办法
191
查看次数

C#将类暴露给COM - 通用集合

我们有一个用C#.Net 2.0编写的小框架,我们想要向COM公开.

问题是,我们有一些通用类,将公开如下:

interface IOurClass
{
  ReadonlyCollection<IOurListObject> OurCollection
  {
    get;
  }
}

interface IOurListObject
{
  //Some properties that don't matter
}
Run Code Online (Sandbox Code Playgroud)

将通用集合暴露给COM的最佳(或推荐方法)是什么?我们不必支持泛型,我们只需要以某种方式公开IOurListObject的集合.

我们也希望避免为我们使用的每个集合编写一个新类,但它可能是不可能的.

.net c# generics com generic-list

3
推荐指数
1
解决办法
3951
查看次数