2

我有两种方法:

public void WriteRecord(string collectionName, IDatabaseRecord databaseRecord)
public void WriteRecord(string collectionName, BsonDocument bsonDocument)

我将它们包含在我的界面中:

void WriteRecord(string collectionName, BsonDocument bsonDocument);
void WriteRecord(string collectionName, IDatabaseRecord databaseRecord);

然后当我打电话时;

_databaseClient.WriteRecord(Collections.Tracking, workflowTrackingRecord);

其中workflowTrackingRecord的类型为WorkflowInternalTrackingRecord : IDatabaseRecord

我可以看到代码正在尝试调用第二种方法(使用BsonDocument的方法),因为我在上面的行中得到了这个编译错误:

“'MongoDB.Bson.BsonDocument' 类型在未引用的程序集中定义。您必须添加对程序集 'MongoDB.Bson... 的引用”

如果我删除

void WriteRecord(string collectionName, IDatabaseRecord databaseRecord); 

然后从界面

_databaseClient.WriteRecord(Collections.Tracking, workflowTrackingRecord);

工作正常。

为什么编译器指向错误的方法。它使用什么标准来决定?

4

1 回答 1

1

您还没有得出结论认为编译器选择了错误的重载。要确定哪个重载是合适的,编译器需要 BsonDocument 和 IDatabaseRecord 的类型信息。但它不能那样做,它只知道 BsonDocument 存在,但不知道它是什么样子。

或者换句话说,编译器不仅对完美的候选者感到满意,它还想知道所有的候选者。在这种特定情况下并不是那么明显有用,但是如果重载有任何歧义,那么重要的是您会收到一条好的错误消息,并避免编译器仅仅因为它对正确的了解不足而选择错误的消息.

只需提供装配参考,您的问题就会得到解决。

于 2013-07-10T11:59:59.957 回答