铸造 - 无法转换VB样本。 [英] Casting - Cant convert VB sample.

查看:78
本文介绍了铸造 - 无法转换VB样本。的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

您好我试图让这个VB类型代码在C中工作

Sub SetColumns_Example(

Dim ol As Outlook.Applicatio

Dim MyFolder As MAPIFolde

Dim itms As Item

Dim itm As Objec

Dim dtmStart As Date,dtmEnd As Dat

Dim lngElapsed As Lon

设置ol =新的Outlook.Applicatio

设置MyFolder = ol.Session.GetDefaultFolder(10

设置itms = MyFolder.Item

itms.SetColumns" [FullName],[CompanyName]

For each itm in itm

Debug。打印itm.FullName&","& itm.CompanyNam

Nex


这是我的第一次C#尝试

items.SetColumns(" [FullName],[CompanyName]")

foreach(物品中的物品o


if(o != null

Console.WriteLine(o.FullName); //给出编译错误(251):''object''不包含''FullName


继承人另一个人诱惑


items.SetColumns(" [FullName],[CompanyName]")

foreach(Microsoft.Office.Interop.Outlook.ContactItem ci in items)//生成无效的强制转换异常


if(ci!= null


Console.WriteLine(ci.FullName);


另一次尝试


items.SetColumns(" [FullName],[CompanyName]")

foreach(Object o项目


Microsoft.Office.Interop.Outlook.ContactItem ci = o as Microsoft.Office.Interop.Outlook.ContactItem

// ci总是如此null ...: -

if(ci!= null


Console.WriteLine(o.FullName); //给出编译错误(251):''对象''不包含''FullName


的定义,没有items.SetColumns,items包含ContactItems,并且它在简单的情况。 .SetColumns似乎改变了里面的对象类型


无论如何反射可以帮助


感谢


Kurt

解决方案

也许是这样的?


void SetColumns_Example()

{

Outlook.Application ol;

MAPIFolder MyFolder;

项目itms;

/ / object itm;

Date dtmStart,dtmEnd;

long lngElapsed;


ol = new Outlook.Application();

MyFolder = ol.Session.GetDefaultFolder(10);

itms = MyFolder.Items;

// IMHO

itms.SetColumns [FullName,CompanyName]

foreach(项目itm in itms)

{

Debug.Print itm.FullName& , &安培; itm.CompanyName

}

}


如果您要发布更多代码,那么它将更容易为您提供帮助


" Kurt" <一个******* @ discussions.microsoft.com>在留言中写道

news:62 ********************************** @ microsof t.com ...

您好我试图让这个VB类型代码在C#中工作

Sub SetColumns_Example()
Dim ol As Outlook.Application
昏暗的MyFolder作为MAPIFolder
将它作为项目点亮
将它作为对象点亮
Dim dtmStart作为日期,dtmEnd作为日期
Dim lngElapsed As Long
Set ol =新的Outlook.Application
设置MyFolder = ol.Session.GetDefaultFolder(10)
设置itms = MyFolder.Items
itms.SetColumns" [FullName],[CompanyName]"
对于每个itm in itms
Debug.Print itm.FullName& , &安培; itm.CompanyName
下一页

这是我的第一次C#尝试:

items.SetColumns(" [FullName],[CompanyName]");
foreach(项目中的对象)
{
if(o!= null)
{
Console.WriteLine(o.FullName); //给出编译错误(251):
''对象''不包含''FullName''的定义'}


继承人的另一次尝试:

items.SetColumns(" [FullName],[CompanyName]");
foreach(项目中的Microsoft.Office.Interop.Outlook.ContactItem ci)//
生成无效的强制转换例外。 {
如果(ci!= null)
{
Console.WriteLine(ci.FullName);
}
}

另一次尝试:

items.SetColumns(" [FullName],[CompanyName]");
foreach(项目中的对象)
{
Microsoft.Office。 Interop.Outlook.ContactItem ci = o as
Microsoft.Office.Interop.Outlook.ContactItem; // ci总是为空... :-(
if(ci!= null)
{/> Console.WriteLine(o.FullName); //给出编译错误(251):
''对象''不包含''FullName'的定义'}

没有items.SetColumns,项目包含ContactItems,并且它在$ b中工作$ b简单的情况。。SetColumns似乎改变了里面对象的类型。
反射可以帮助到底吗?

谢谢

Kurt


在这种情况下,我会在
foreach中获得一个无效的强制转换异常(在itms中将其设为

line


正如我所提到的那样,我试着自己做了这个
foreach(Microsoft.Office.Interop.Outlook.ContactItem ci in items)//生成无效施放异常

在我的第一个例子中


如果我们从不做的话它是有效的.SetColumns


之前我们执行items.SetColumns,项目似乎包含对象th at可以转换为Outlook.ContactItem对象。在我们执行items.SetColums之后,项目似乎包含无法转换为Outlook.ContactItem对象的对象


只是想知道我做错了什么

- ---- Vadym Stetsyak写道:----


也许这样的事情


void SetColumns_Example(

Outlook.Application ol

MAPIFolder MyFolder

项目itms

//对象itm

日期dtmStart,dtmEnd

long lngElapsed


ol = new Outlook.Application()

MyFolder = ol.Session.GetDefaultFolder(10 )

itms = MyFolder.Items

// IMH

itms.SetColumns [FullName,CompanyName

foreach(项目itm in itms


Debug.Print itm.FullName&","& itm.CompanyNam


如果你要发布更多代码然后它会更容易帮助你


Kurt,

你的联系人文件夹中是否有分发列表?


Contacts文件夹通常包含ContactItem& DistListItem

对象,但是如果你设法在那里的文件夹中获得另一个Item Type

可能更多!


还SetColumns本身可能正在返回一个不同类型的对象,因为

你实际上是在指示你想要一个子类型的联系人,而不是一个

联系人。我稍后需要测试SetColumns,因为我还没有使用过.NET的SetColumns

...


我会使用一个对象变量for每个本身,然后将其转换为上面的

各自的对象类型。


类似(未经测试)的东西:

foreach(object itm in itms)
{
if(itm is ContactItem)

{

ContactItem contact = itm as ContactItem; Debug.Print contact.FullName& , &安培; contact.CompanyName
}

if(itm是DistListItem)

{

DistListItem dist = itm as DistListItem; Debug.Print dist.DLName;
}

if(itm是???)''检查SetColumn类型的对象

...}


如果你没有它,以下网站提供了大量的信息

使用.NET的.NET。

http://www.microeye.com/resources/res_outlookvsnet.htm


希望这有帮助

Jay

" Kurt" <一个******* @ discussions.microsoft.com>在留言中写道

新闻:7F ********************************** @ microsof t.com ......在这种情况下,我会在
foreach(在itms中的项目)
行中获得一个无效的强制转换异常。

正如我所提到的,我试过自己执行
foreach(项目中的Microsoft.Office.Interop.Outlook.ContactItem ci)//
生成无效的强制转换异常。在我的第一个例子中。

如果我们从不做items.SetColumns它会起作用。

在我们执行items.SetColumns之前,项目似乎包含
的对象可以转换为Outlook.ContactItem对象。在我们执行

items.SetColums后,项目似乎包含无法转换为

Outlook.ContactItem对象的对象。
只是想知道我做错了什么。

----- Vadym Stetsyak写道:-----

也许是这样的?

void SetColumns_Example()
{
Outlook.Application ol;
MAPIFolder MyFolder;
项目itms;
//对象itm;
日期dtmStart,dtmEnd;
long lngElapsed ;

ol = new Outlook.Application();
MyFolder = ol.Session.GetDefaultFolder(10);
itms = MyFolder.Items;
//恕我直言
itms.SetColumns [FullName,CompanyName]
foreach(项目itm in itms)
{
Debug.Print itm.FullName& , &安培; itm.CompanyName
}

如果您要发布更多代码,那么它将更容易帮助您



Hi I was trying to get this VB type code to work in C

Sub SetColumns_Example(
Dim ol As Outlook.Applicatio
Dim MyFolder As MAPIFolde
Dim itms As Item
Dim itm As Objec
Dim dtmStart As Date, dtmEnd As Dat
Dim lngElapsed As Lon
Set ol = New Outlook.Applicatio
Set MyFolder = ol.Session.GetDefaultFolder(10
Set itms = MyFolder.Item
itms.SetColumns "[FullName],[CompanyName]
For Each itm In itm
Debug.Print itm.FullName & ", " & itm.CompanyNam
Nex

Here is my first C# attempt

items.SetColumns("[FullName],[CompanyName]")
foreach( Object o in items

if(o != null

Console.WriteLine(o.FullName); // Gives compile error (251): ''object'' does not contain a definition for ''FullName

Heres another attempt

items.SetColumns("[FullName],[CompanyName]")
foreach( Microsoft.Office.Interop.Outlook.ContactItem ci in items) // Generates invalid cast exception

if(ci != null

Console.WriteLine(ci.FullName);

Another attempt

items.SetColumns("[FullName],[CompanyName]")
foreach( Object o in items

Microsoft.Office.Interop.Outlook.ContactItem ci = o as Microsoft.Office.Interop.Outlook.ContactItem
// ci is ALWAYS null... :-
if(ci != null

Console.WriteLine(o.FullName); // Gives compile error (251): ''object'' does not contain a definition for ''FullName

without the items.SetColumns, items contains ContactItems, and It works in the simple case. The .SetColumns seems to change the type of object inside

Can Reflection help here in anyway

Thank

Kurt

解决方案

Maybe something like this?

void SetColumns_Example()
{
Outlook.Application ol;
MAPIFolder MyFolder;
Items itms;
// object itm;
Date dtmStart, dtmEnd;
long lngElapsed;

ol = new Outlook.Application();
MyFolder = ol.Session.GetDefaultFolder(10);
itms = MyFolder.Items;
//IMHO
itms.SetColumns[FullName,CompanyName]
foreach(Item itm in itms)
{
Debug.Print itm.FullName & ", " & itm.CompanyName
}
}

If you will post more code then it will be easier to help you

"Kurt" <an*******@discussions.microsoft.com> wrote in message
news:62**********************************@microsof t.com...

Hi I was trying to get this VB type code to work in C#

Sub SetColumns_Example()
Dim ol As Outlook.Application
Dim MyFolder As MAPIFolder
Dim itms As Items
Dim itm As Object
Dim dtmStart As Date, dtmEnd As Date
Dim lngElapsed As Long
Set ol = New Outlook.Application
Set MyFolder = ol.Session.GetDefaultFolder(10)
Set itms = MyFolder.Items
itms.SetColumns "[FullName],[CompanyName]"
For Each itm In itms
Debug.Print itm.FullName & ", " & itm.CompanyName
Next
Here is my first C# attempt:

items.SetColumns("[FullName],[CompanyName]");
foreach( Object o in items)
{
if(o != null)
{
Console.WriteLine(o.FullName); // Gives compile error (251): ''object'' does not contain a definition for ''FullName'' }
}

Heres another attempt:

items.SetColumns("[FullName],[CompanyName]");
foreach( Microsoft.Office.Interop.Outlook.ContactItem ci in items) // Generates invalid cast exception. {
if(ci != null)
{
Console.WriteLine(ci.FullName);
}
}

Another attempt:

items.SetColumns("[FullName],[CompanyName]");
foreach( Object o in items)
{
Microsoft.Office.Interop.Outlook.ContactItem ci = o as Microsoft.Office.Interop.Outlook.ContactItem; // ci is ALWAYS null... :-(
if(ci != null)
{
Console.WriteLine(o.FullName); // Gives compile error (251): ''object'' does not contain a definition for ''FullName'' }
}

without the items.SetColumns, items contains ContactItems, and It works in the simple case. The .SetColumns seems to change the type of object inside.
Can Reflection help here in anyway?

Thanks

Kurt



Well in this case I would get an invalid cast exception in th
foreach(Item itm in itms
line

As I mentioned I tried myself to do th
foreach( Microsoft.Office.Interop.Outlook.ContactItem ci in items) // Generates invalid cast exception
in my first example

It works if we never do the items.SetColumns

Before we do the items.SetColumns, items appears to contain objects that can be casted to Outlook.ContactItem objects. After we do the items.SetColums, items appears to contain objects that CANNOT be casted to Outlook.ContactItem objects

Just wondering what I was doing wrong
----- Vadym Stetsyak wrote: ----

Maybe something like this

void SetColumns_Example(

Outlook.Application ol
MAPIFolder MyFolder
Items itms
// object itm
Date dtmStart, dtmEnd
long lngElapsed

ol = new Outlook.Application()
MyFolder = ol.Session.GetDefaultFolder(10)
itms = MyFolder.Items
//IMH
itms.SetColumns[FullName,CompanyName
foreach(Item itm in itms

Debug.Print itm.FullName & ", " & itm.CompanyNam

If you will post more code then it will be easier to help yo


Kurt,
Do you have Distribution Lists in your contacts folder?

The Contacts folder will normally contain both ContactItem & DistListItem
objects, however if you manage to get another Item Type in the folder there
may be more!

Also SetColumns itself may be returning an object of a different type, as
you are effectively indicating that you want a subtype of Contact, not a
Contact. I will need to test SetColumns later, as I have not used SetColumns
from .NET yet...

I would use an object variable for the for each itself, then cast it to the
respective object type above.

Something like (untested):

foreach(object itm in itms)
{ if (itm is ContactItem)
{
ContactItem contact = itm as ContactItem; Debug.Print contact.FullName & ", " & contact.CompanyName }
if (itm Is DistListItem)
{
DistListItem dist = itm as DistListItem ; Debug.Print dist.DLName; }
if (itm Is ???) '' check for SetColumn type of object
... }
If you don''t have it, the following site provides a plethora of information
on using Outlook from .NET.

http://www.microeye.com/resources/res_outlookvsnet.htm

Hope this helps
Jay
"Kurt" <an*******@discussions.microsoft.com> wrote in message
news:7F**********************************@microsof t.com... Well in this case I would get an invalid cast exception in the
foreach(Item itm in itms)
line.

As I mentioned I tried myself to do the
foreach( Microsoft.Office.Interop.Outlook.ContactItem ci in items) // Generates invalid cast exception. in my first example.

It works if we never do the items.SetColumns.

Before we do the items.SetColumns, items appears to contain objects that can be casted to Outlook.ContactItem objects. After we do the
items.SetColums, items appears to contain objects that CANNOT be casted to
Outlook.ContactItem objects.
Just wondering what I was doing wrong.
----- Vadym Stetsyak wrote: -----

Maybe something like this?

void SetColumns_Example()
{
Outlook.Application ol;
MAPIFolder MyFolder;
Items itms;
// object itm;
Date dtmStart, dtmEnd;
long lngElapsed;

ol = new Outlook.Application();
MyFolder = ol.Session.GetDefaultFolder(10);
itms = MyFolder.Items;
//IMHO
itms.SetColumns[FullName,CompanyName]
foreach(Item itm in itms)
{
Debug.Print itm.FullName & ", " & itm.CompanyName
}
}

If you will post more code then it will be easier to help you



这篇关于铸造 - 无法转换VB样本。的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆