我正在尝试创建一个通用容器类型来提供单个公共接口,以及隐藏我正在使用的内部容器,因为它们可能会发生变化.
基本上我有插件返回项目集合,我不希望插件知道我的代码使用的容器类型.
任何人都能指出我比下面的示例代码更好的方向吗?
template<class C, typename I>
class Container
{
public:
//...
void push(const I& item)
{
if(typeid(C) == typeid(std::priority_queue<I>))
{
std::priority_queue<I>* container = (std::priority_queue<I>*)&_container;
container->push(item);
}
if(typeid(C) == typeid(std::list<I>))
{
std::list<I>* container = (std::list<I>*)&_container;
container->push_back(item);
}
else
{
//error!
}
};
private:
C _container;
//...
}
Run Code Online (Sandbox Code Playgroud)
谢谢
我正在寻找一个可以用多个键搜索的数据结构.用例子更容易解释:
var myDataStructure = new MultiKeyDataStructure<int, string, MyType>();
myDataStructure.Add(1, "some string 1", new MyType());
myDataStructure.Add(2, "some string 2", new MyType());
var myType = new MyType();
myDataStructure.Add(3, "some string 3", myType);
Tuple<string, MyType> t1 = myDataStructure[1];
Tuple<int, MyType> t2 = myDataStructure["some string 1"];
Tuple<int, string> t3 = myDataStructure[myType];
Run Code Online (Sandbox Code Playgroud)
这样的事情是可能的,如果是这样的话,还有什么东西可以做到吗?你会如何实现像键一样对待所有东西的东西,并通过搜索它们中的任何一个来返回所有相关的键?
理想情况下,您还可以使用任何数量和/或类型的参数:
var myDataStructure = new MultiKeyDataStructure<int, string, Foo, Bar>();
Run Code Online (Sandbox Code Playgroud) 我写了一行代码已经很久了,所以,如果我问一个愚蠢的问题,请耐心等待.
尽管IntelliSense在Names之后显示了Intersect方法,但在尝试比较两个IEnumerables时出现以下错误.
我试图比较数据库查询的结果与html中的有序列表.
'IEnumerable'不包含'Intersect'的定义,并且最好的扩展方法重载'Queryable.Intersect(IQueryable,IEnumerable)'需要'IQueryable'类型的接收器
namespace Data.Repositories
{
public class StudentsRepository
{
public class Student
{
public string FullName { get; set; }
}
public static IEnumerable<Student> GetData(string CardNumber, string Section)
{
// FullName varchar(300) in Database
return CommonFunctions.ExecuteReader1<Student>(QryStudentSectionDetails(CardNumber, Section)).AsQueryable();
}
}
}
namespace Tests.ActionsLibrary.StudentPaper
{
public class StudentActions:TestBase
{
bool IsMatch = false;
// Get Names from DataBase
IEnumerable<Student> Names = GetData(CardNumber, Section);
// Get Names from Ordered list in HTML
IEnumerable<IWebElement> OrderedList = driver.FindElements(By.XPath("//li[@ng-repeat='Names']"));
if (Names.Count() == OrderedList.Count() && …Run Code Online (Sandbox Code Playgroud) 我想使用类似的泛型集合Dictionary,但Dictionary要求每个键都是唯一的.我有相同"密钥"的多个值,所以我需要一个允许的通用集合.
我意识到这使得钥匙不再是钥匙,但我不知道还有什么可以称之为钥匙.
这些天我是一名学习C#的Java程序员.
通常在Java中使用列表时,它应该是针对其接口的优先编程,以便在实现之间切换:
List<Object> list = new ArrayList<Object>();
//or
list = new LinkedList<Object>();
Run Code Online (Sandbox Code Playgroud)
C#怎么样?是否存在类似的方法?有人能告诉我一个例子吗?从现在开始我以这种方式构建一个列表,但我不认为List是一个接口:
List<int> list = new List<int>();
list.Add(2);
Run Code Online (Sandbox Code Playgroud) 我有一个带有通配符类型集合的类,它是一个单例,类似于:
public ObliviousClass{
private static final ObliviousClass INSTANCE = new ObliviousClass();
private Map<Key, Type<?>> map = new HashMap<Key, Type<?>>();
public void putType(Key key, Type<?> type){
map.put(type);
}
// returns the singleton
public static ObliviousClass getInstance(){
return INSTANCE;
}
}
Run Code Online (Sandbox Code Playgroud)
我希望能够在客户端代码中为此集合添加不同的参数化类型:
void clientMethod(){
ObliviousClass oc = ObliviousClass.getInstance();
Type<Integer> intType = ...
Type<String> stringType = ...
oc.putType(new Key(0), intType);
oc.putType(new Key(1), stringType);
}
Run Code Online (Sandbox Code Playgroud)
到目前为止,据我所知,一切都很好.但是客户还需要能够获得Type<?>提供的服务Key.因此,将添加以下类似的方法ObliviousClass:
public Type<?> getType(Key key){
return map.get(key);
}
Run Code Online (Sandbox Code Playgroud)
但是在我有用的Java副本中,我读到:
不要将通配符类型用作返回类型.
我理解这个问题,因为客户端必须抛出返回的内容 …
我有一个声明为的Dictionary对象var as Dictionary(of String, String).
我正在尝试使用Generic Collection可用的LINQ扩展,但我只获取非扩展方法.
我需要将Dictionary集合转换为具有以下模式的字符串: key1=val1, key2=val2, ..., keyn=valn
首先做一个foreach循环的想法会到达现场,除了我是程序员阻塞的事实.
到目前为止我所拥有的,但怀疑它是产生这个的最佳逻辑模式:
Public Overrides Function ToString() As String
Dim ret As String = ""
For Each kv As KeyValuePair(Of String, String) In Me._set
If ret <> String.Empty Then
ret &= ", "
End If
ret &= String.Format("{0}={1}", kv.Key, kv.Value)
Next
Return ret
End Function
Run Code Online (Sandbox Code Playgroud)
由于某种原因,即使我已将System.Core&System.Linq库导入项目,也没有任何扩展的LINQ扩展出现在我的dev-env intellisense中.所以现在,除非有人可以帮助我在Intellisense中显示LINQ扩展,否则它们是不可能的.
发现LINQ扩展没有出现的问题,所以他们回到了桌子上;)
想象一下struct:
struct Person
{
public string FirstName { get; set; }
public string LastName { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
以下代码:
var list = new List<Person>();
list.Add(new Person { FirstName = "F1", LastName = "L1" });
list.Add(new Person { FirstName = "F2", LastName = "L2" });
list.Add(new Person { FirstName = "F3", LastName = "L3" });
// Can't modify the expression because it's not a variable
list[1].FirstName = "F22";
Run Code Online (Sandbox Code Playgroud)
当我想要更改Property它的值时,它会给我以下错误:
Can't modify the expression because it's not …Run Code Online (Sandbox Code Playgroud) 为什么IEnumerable<T>.Reverse()返回带有原始集合的List<T>反转集合并反转原始集合本身?这对我来说有点困惑,因为List<T>继承自IEnumerable<T>.
我正在尝试编写一个泛型方法,该方法接受任意数量的参数作为对象的键,并使用其键的值作为构造函数的参数.这是我最初的实现:
// Typescript 2.x
export function oldMethod<TProps>() {
function create<
TInstance extends Geometry | BufferGeometry,
>(
geometryClass: new () => TInstance,
): any;
function create<
TInstance extends Geometry | BufferGeometry,
TKey1 extends Extract<keyof TProps, string>,
>(
geometryClass: new (param1: TProps[TKey1]) => TInstance,
key1: TKey1,
): any;
function create<
TInstance extends Geometry | BufferGeometry,
TKey1 extends Extract<keyof TProps, string>,
TKey2 extends Extract<keyof TProps, string>,
>(
geometryClass: new (param1: TProps[TKey1], param2: TProps[TKey2]) => TInstance,
key1: TKey1,
key2: TKey2,
): any;
function create< …Run Code Online (Sandbox Code Playgroud) c# ×5
.net ×2
dictionary ×2
generics ×2
java ×2
.net-4.0 ×1
c++ ×1
collections ×1
generic-list ×1
ienumerable ×1
interface ×1
linq ×1
list ×1
stl ×1
struct ×1
typescript ×1
vb.net ×1
wildcard ×1