0

有没有办法从函数中返回一个对象。棘手的部分是对象可以是任何类型。我想要一个函数来处理从会话返回的对象。所以我想退回的对象可能是前一分钟的产品,但我可能想在下一分钟退回客户。是否有可能或者我必须做一个函数来返回每种类型。

4

6 回答 6

6
  1. 返回object它是最高级别。
  2. 使方法通用。
  3. 返回dynamic(感谢@AustinSalonen)

public T Foo<T>(T obj)
{
    var variable = GetTFromFooElse();
    return variable; 
}

public dynamic Foo()
{
    var variable = GetSomethingFromFooElse();
    return variable;
}
于 2012-05-14T17:28:20.313 回答
4

是的,您可以返回Type object。不过,您需要将结果投射到调用者中才能使用任何远程有用的东西。

static object CarFactory (){
    return new Car();
}

static void Main(){

    Car car = (Car)CarFactory();

    /* do stuff with car */
    car.Crash();
}

注意使用泛型是一个标准,因为它提供了所需的抽象级别和类型安全......

于 2012-05-14T17:27:42.957 回答
1

根据您的使用情况,也许您可​​以使用泛型而不是使用对象?

有一个Session<T>有方法的类

T GetResult()

你可以像这样制作实例:

var x = new Session<Product>();
var y = new Session<Customer>();

通过这种方式,您可以获得一些不错的类型安全性。

于 2012-05-14T17:30:17.633 回答
1

在这种情况下,您最好通过某种服务/Api 来包装您的会话类。

例如:

public static class SessionAccess
{
    public static Something SomethingSession
    {
        get
        {
            return Session["Something"] as Something;
        }

        set
        {
            Session["Something"] = value;
        }
    }
}

拥有一致的会话访问机制很重要,以避免意外跨过相同的会话密钥,并确保它始终是相同的底层数据类型。

于 2012-05-14T17:31:42.427 回答
0

如果你的方法返回一个对象,你可以返回任何你想要的对象。

于 2012-05-14T17:27:55.733 回答
0

您的方法可以返回一个object,但您必须在调用它时转换为您想要的对象。

于 2012-05-14T17:28:53.987 回答