2013-04-08 29 views
0

我使用下面的代碼從Outlook檢索特定的地址簿:PowerShell的C#轉換comobject到.NET

$outlook = $(New-Object -ComObject Outlook.Application) 
$Session = $outlook.Session 
$Session.Logon() 
$ab = $Session.AddressLists | ? {$_.Name -eq 'test'} 

然後嘗試使用C#轉換的$ab對象使用以下到.NET:

$source = @" 
using Microsoft.Office.Interop.Outlook; 
public unsafe static class OAB 
{ 
    public static void List(object Stream) 
    { 
     var i = Stream as Microsoft.Office.Interop.Outlook.AddressList; 
     return i; 
    } 
} 
"@ 
$cp = new-object System.CodeDom.Compiler.CompilerParameters                                                 
$cp.CompilerOptions = "/unsafe" 
$cp.ReferencedAssemblies.Add('C:\wkdir\refassem\Microsoft.Office.Interop.Outlook.dll') 
Add-Type -TypeDefinition $source -CompilerParameters $cp 

我收到的錯誤是:

Since 'OAB.List(object)' returns void, a return keyword must not be followed by an object expression 

聲明,我是個完滿成功新手到C#所以對我來說很容易!

回答

0

您已將您的List函數聲明爲void的返回類型,但您正在返回一個值。要解決,只是改變你的函數是:

public static Microsoft.Office.Interop.Outlook.AddressList List(object Stream) 

void功能意味着沒有價值將是回報。如果您計劃返回一個值,那麼您需要刪除void並將其替換爲您想要返回的類型。