![](/img/trans.png)
[英]c# SharePoint combine multiple ListItemCollection into one
[英]c# combine multiple types into one
我面臨一個問題,我需要從多種類型構造一個 object 並返回到前端,這就是我想要的(在 C# 中)。
前端想要的形狀是這樣的
{
...
"props" : // this is the place I need to fill-up.
...
}
對於 controller,這是自定義響應。
public IActionResult Index()
{
return JohnDoe.Render();
}
在幕后, Render
將從兩個地方獲取一些數據。
public object Foo()
{
return string, int, IEnumerable, instance, etc;
}
public object Bar()
{
return string, int, IEnumerable, instance, etc;
}
我知道return
語句無效,我的意思是這些都是可能的。
這最終就是我想要的。
public object Combine()
{
var foo = Foo();
var bar = Bar();
return foo + bar;
}
return
語句再次無效,我想要一個包含它們的最終object
。 它可以是Dictionary<string, object>
或匿名 object new {}
,或者只要一個 object 兩者兼有,其他東西都可以。
顯然我在這里所擁有的是不可能實現的。 這是我想出的兩個選項。
public object Combine()
{
var foo = Foo();
var bar = Bar();
return new { foo, bar };
}
我知道我可以有一個Type
而不是匿名的 object,問題是這將引入兩個鍵foo
和bar
,如果可能的話我不想這樣做。
foo
和bar
只返回instance
。 沒有string
, int
, Array
, IEnumerable
等。如果我這樣做,事情會變得容易一些。 我需要做的就是遍歷獲取values
的properties
和 map 到new {}
或Dictionary<string, object>
。 這樣我就不需要引入新的密鑰了。 更新:所以基本上我想盡可能避免引入新密鑰,因為我只想返回沒有包裝器的原始密鑰。 這就是為什么我想出了選項 2,只允許instance
。 請讓我知道你的想法。
選項3)怎么樣
Foo
和Bar
的包裝器,稱為FooBar
?public class FooBar
{
public Foo Foo { get; set; }
public Bar Bar { get; set; }
}
為什么?
C# 是一種面向對象的編程語言。 它基於將數據片段以及與該數據相關的行為包裝到稱為對象的特殊捆綁包中的概念,您可以從稱為 class 的“藍圖”構建這些包。
您可以使用Tuple
:
public Tuple<Foo, Bar> Combine()
{
var foo = Foo();
var bar = Bar();
return Tuple.Create(foo, bar);
}
或ValueTuple
:
public (Foo, Bar) Combine()
{
var foo = Foo();
var bar = Bar();
return (foo, bar);
}
還有命名字段:
public (Foo foo, Bar bar) Combine()
{
var foo = Foo();
var bar = Bar();
return (foo, bar);
}
或者,正如 Dennis1679 建議的那樣,制作一個自定義類型。
我想這就是你要問的
public sealed class FooBar : Foo, Bar
{
}
不幸的是,這在 C# 中是不可能的。 但本質上,這就是你正在做的事情。 您可以執行以下操作:
public sealed class FooBar: IFoo, IBar
{
public FooBar(IFoo foo, IBar bar)
{
///Assign its members
}
///Implement its members
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.