Announcement of 2 similar anonymous objects

Below is a declaration of 2 anonymous objects. The second is the same as the first, except that there is no element inside it lastRefresh.

Is there a way to declare these 2 objects without duplicating the same part?

var routeValuesForAutoRefresh = new
{
    page = @ViewBag.nextPage,
    lastRefresh = @ViewBag.lastRefresh,
    searchTerm = Request["searchTerm"],
    searchColumn = Request["searchColumn"],
    searchOrder = Request["searchOrder"],
    searchDescending = (Request["searchDescending"] ?? "true").ToLower().IndexOf("true") > -1,
    requestStatus0 = (Request["requestStatus0"] ?? "false").ToLower().IndexOf("true") > -1,
    requestStatus1 = (Request["requestStatus1"] ?? "true").ToLower().IndexOf("true") > -1,
    requestStatus3 = (Request["requestStatus3"] ?? "true").ToLower().IndexOf("true") > -1,
    requestStatus5 = (Request["requestStatus5"] ?? "true").ToLower().IndexOf("true") > -1,
    requestStatus7 = (Request["requestStatus7"] ?? "true").ToLower().IndexOf("true") > -1,
    requestStatus9 = (Request["requestStatus9"] ?? "true").ToLower().IndexOf("true") > -1
};
var routeValuesForNextPage = new
{
    page = @ViewBag.nextPage,
    searchTerm = Request["searchTerm"],
    searchColumn = Request["searchColumn"],
    searchOrder = Request["searchOrder"],
    searchDescending = (Request["searchDescending"] ?? "true").ToLower().IndexOf("true") > -1,
    requestStatus0 = (Request["requestStatus0"] ?? "false").ToLower().IndexOf("true") > -1,
    requestStatus1 = (Request["requestStatus1"] ?? "true").ToLower().IndexOf("true") > -1,
    requestStatus3 = (Request["requestStatus3"] ?? "true").ToLower().IndexOf("true") > -1,
    requestStatus5 = (Request["requestStatus5"] ?? "true").ToLower().IndexOf("true") > -1,
    requestStatus7 = (Request["requestStatus7"] ?? "true").ToLower().IndexOf("true") > -1,
    requestStatus9 = (Request["requestStatus9"] ?? "true").ToLower().IndexOf("true") > -1
};
+4
source share
2 answers

There is no syntax for it, but you have several suitable workarounds:

  • Make your class named and derive it from another (or derive it from a common base)
  • Make a third anonymous object with shared fields, then use it as in "real" named objects.
  • Make separate local variables and use them to create fields for both anonymous objects.

, .

:

var routeValuesForNextPage = new
{
    page = @ViewBag.nextPage,
    searchTerm = Request["searchTerm"],
    searchColumn = Request["searchColumn"],
    searchOrder = Request["searchOrder"],
    searchDescending = (Request["searchDescending"] ?? "true").ToLower().IndexOf("true") > -1,
    requestStatus0 = (Request["requestStatus0"] ?? "false").ToLower().IndexOf("true") > -1,
    requestStatus1 = (Request["requestStatus1"] ?? "true").ToLower().IndexOf("true") > -1,
    requestStatus3 = (Request["requestStatus3"] ?? "true").ToLower().IndexOf("true") > -1,
    requestStatus5 = (Request["requestStatus5"] ?? "true").ToLower().IndexOf("true") > -1,
    requestStatus7 = (Request["requestStatus7"] ?? "true").ToLower().IndexOf("true") > -1,
    requestStatus9 = (Request["requestStatus9"] ?? "true").ToLower().IndexOf("true") > -1
};
var routeValuesForAutoRefresh = new {
    routeValuesForNextPage
,   lastRefresh = @ViewBag.lastRefresh
};

:

var page = @ViewBag.nextPage;
var searchTerm = Request["searchTerm"];
var searchColumn = Request["searchColumn"];
var searchOrder = Request["searchOrder"];
var searchDescending = (Request["searchDescending"] ?? "true").ToLower().IndexOf("true") > -1;
var requestStatus0 = (Request["requestStatus0"] ?? "false").ToLower().IndexOf("true") > -1;
var requestStatus1 = (Request["requestStatus1"] ?? "true").ToLower().IndexOf("true") > -1;
var requestStatus3 = (Request["requestStatus3"] ?? "true").ToLower().IndexOf("true") > -1;
var requestStatus5 = (Request["requestStatus5"] ?? "true").ToLower().IndexOf("true") > -1;
var requestStatus7 = (Request["requestStatus7"] ?? "true").ToLower().IndexOf("true") > -1;
var requestStatus9 = (Request["requestStatus9"] ?? "true").ToLower().IndexOf("true") > -1;

var routeValuesForAutoRefresh = new {
    page,
    lastRefresh = @ViewBag.lastRefresh,
    searchTerm,
    searchColumn,
    searchOrder,
    searchDescending,
    requestStatus0,
    requestStatus1,
    requestStatus3,
    requestStatus5,
    requestStatus7,
    requestStatus9
};
var routeValuesForNextPage = new {
    page,
    searchTerm,
    searchColumn,
    searchOrder,
    searchDescending,
    requestStatus0,
    requestStatus1,
    requestStatus3,
    requestStatus5,
    requestStatus7,
    requestStatus9
};
+1

: 2 ?

, .

RouteValues, , , RouteValues, .

(.. values.whatever = "hello world";), :

RouteValues values = new RouteValues
{
    page = @ViewBag.nextPage
};
0

All Articles