Is there an “anonymous” generic tag in C#, like '?' in Java?

前端 未结 6 1373
醉梦人生
醉梦人生 2020-12-09 08:05

In Java, one can declare a variable parameterised by an \"unknown\" generic type, which looks like this:

Foo x;

Is there an equiva

6条回答
  •  隐瞒了意图╮
    2020-12-09 08:50

    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); 
        }
    }
    

提交回复
热议问题