In Java, one can declare a variable parameterised by an \"unknown\" generic type, which looks like this:
Foo> x;
Is there an equiva
The short answer is no. There isn't an equivalent feature in C#.
A workaround, from C# from a Java developer's perspective by Dare Obasanjo:
In certain cases, one may need create a method that can operate on data structures containing any type as opposed to those that contain a specific type (e.g. a method to print all the objects in a data structure) while still taking advantage of the benefits of strong typing in generics. The mechanism for specifying this in C# is via a feature called generic type inferencing while in Java this is done using wildcard types. The following code samples show how both approaches lead to the same result.
C# Code
using System;
using System.Collections;
using System.Collections.Generic;
class Test{
//Prints the contents of any generic Stack by
//using generic type inference
public static void PrintStackContents(Stack s){
while(s.Count != 0){
Console.WriteLine(s.Pop());
}
}
public static void Main(String[] args){
Stack s2 = new Stack();
s2.Push(4);
s2.Push(5);
s2.Push(6);
PrintStackContents(s2);
Stack s1 = new Stack();
s1.Push("One");
s1.Push("Two");
s1.Push("Three");
PrintStackContents(s1);
}
}
Java Code
import java.util.*;
class Test{
//Prints the contents of any generic Stack by
//specifying wildcard type
public static void PrintStackContents(Stack> s){
while(!s.empty()){
System.out.println(s.pop());
}
}
public static void main(String[] args){
Stack s2 = new Stack ();
s2.push(4);
s2.push(5);
s2.push(6);
PrintStackContents(s2);
Stack s1 = new Stack();
s1.push("One");
s1.push("Two");
s1.push("Three");
PrintStackContents(s1);
}
}